Regras de CSV da RFC 4180
A RFC 4180 define o CSV com precisão: registros separados por CRLF, campos separados por vírgulas, e aspas duplas em torno de qualquer campo que contenha vírgula, aspa ou quebra de linha — com aspas embutidas dobradas como "". A linha de cabeçalho é opcional, o delimitador é a vírgula, e o tipo MIME é text/csv. A maioria dos arquivos reais o segue sem rigor.
Regras de CSV da RFC 4180: explicação
O CSV é mais velho do que a sua especificação. Arquivos de valores separados por vírgula eram trocados há décadas quando a RFC 4180 foi publicada em outubro de 2005 como um documento informativo — não um novo desenho, mas uma descrição cuidadosa do que o mundo já fazia, anotada para que os parsers pudessem concordar. Essa origem explica tanto a sua brevidade quanto a sua crítica mais comum: o padrão descreve a convenção, e a convenção é anterior ao padrão.
As regras em si são curtas. Um arquivo é uma sequência de registros; os registros são separados por CRLF; os campos são separados por vírgulas; e um campo que contenha vírgula, aspa dupla ou quebra de linha deve estar entre aspas duplas, com as aspas internas escritas dobradas. Todo o resto — codificações, cabeçalhos, linhas irregulares — a RFC torna opcional ou deixa para a prática, e é por isso que arquivos reais se desviam.
Este guia percorre a gramática regra por regra com exemplos copiáveis, marca os lugares em que a especificação diz 'pode' e cataloga as divergências que você realmente encontrará: marcas de ordem de byte, delimitadores de ponto e vírgula, terminações de linha Unix. Os conversores linkados ao longo do texto implementam a gramática completa — campos com aspas, quebras de linha embutidas e tudo mais — inteiramente no seu navegador.
Uma gramática fica mais fácil de ver pela saída de um parser: cole um arquivo cheio de aspas em o conversor de CSV para JSON e cada regra acima vira um campo no JSON que ele constrói — análise feita localmente, nada é enviado.
Do lado de quem produz, o conversor de JSON para CSV coloca aspas exatamente onde a RFC 4180 exige, para que idas e voltas por planilhas sobrevivam a vírgulas e quebras de linha nos seus dados.
A gramática: registros, campos, CRLF
A gramática da RFC 4180 cabe em um parágrafo. Um arquivo consiste em registros, cada registro uma sequência de campos separados por vírgulas; os registros são separados por CRLF — os dois bytes 0x0D 0x0A, não o LF puro das ferramentas Unix —, e o último registro pode ou não terminar com um CRLF final. Os campos podem ou não estar entre aspas: o uso de aspas é condicional, não um estilo. O esboço em ABNF é file = [header CRLF] record *(CRLF record); record = field *(comma field) — repare no cabeçalho opcional dentro dos colchetes.
Um arquivo mínimo em conformidade
id,name,score 1,Ada,99 2,Grace,98
O mesmo arquivo como registros
registro 1: id=1, name=Ada, score=99 registro 2: id=2, name=Grace, score=98 (cada registro termina com os dois bytes CRLF; o último pode omiti-los legalmente)
Aspas: a aspa dupla é todo o sistema de escape
Um campo é envolto em aspas duplas quando precisa estar, e a única forma de colocar uma aspa dupla dentro de um campo com aspas é dobrá-la — "" dentro de um campo com aspas significa uma aspa literal. Esse é todo o mecanismo de escape: sem barras invertidas, sem entidades nomeadas, sem um segundo caractere de aspas. Aspas simples são dados comuns, e um espaço perdido depois de uma vírgula faz parte do campo seguinte — a especificação é explícita que os espaços são preservados e não devem ser aparados.
| O valor que você quer | O campo RFC 4180 | Por quê |
|---|---|---|
| plain | plain | Aspas opcionais — a forma sem aspas é o padrão |
| with, comma | "with, comma" | Campos que contêm vírgulas devem estar entre aspas |
| with " quote | "with "" quote" | Aspas embutidas são dobradas dentro das aspas |
| with newline | "with newline" | Campos com aspas podem conter quebras de linha |
| padded | padded | Espaços são dados — aspas opcionais, aparar é proibido |
Um registro, todas as regras de aspas de uma vez
year,quote,note 1962,"she said ""look, no hands""","multi-word, no problem"
Campos analisados
year → 1962 quote → she said "look, no hands" note → multi-word, no problem
Quebras de linha e vírgulas dentro dos campos
Como campos com aspas podem conter quebras de linha, uma linha de CSV não é um registro: um divisor ingênuo em \n corrompe qualquer arquivo com campos de múltiplas linhas — e é por isso que blocos de endereço, colunas de observações e payloads de JSON-in-CSV quebram importadores ingênuos. Um parser em conformidade é uma pequena máquina de estados: dentro das aspas, vírgulas e quebras de linha são dados; fora, são separadores. Não dá para escrever corretamente com split() sozinho.
A mesma máquina de estados resolve os casos extremos da aspa dupla: uma aspa abrindo no meio de um valor, uma aspa sem fechamento no fim do arquivo, aspas dobradas no fim mesmo de um campo. Esses são exatamente os casos para os quais as poucas regras da RFC 4180 foram escritas, e exatamente onde parsers artesanais discordam entre si — a origem da maioria dos relatos de 'funciona no Excel, quebra no importador'.
Dois registros, três linhas físicas
name,address "Ada","12 St James Square, London" "Grace","1 Loop Rd"
O que um parser em conformidade produz
registro 1: Ada | 12 St James Square, London registro 2: Grace | 1 Loop Rd (a vírgula dentro do endereço é dado; o CRLF entre aspas também)
CRLF, o cabeçalho opcional e text/csv
Três detalhes são fixados pela especificação e rotineiramente assumidos ao contrário. Os registros terminam com CRLF — embora o registro final possa omiti-lo, e todo parser que você usa diariamente aceite LF puro. O primeiro registro pode conter nomes de colunas, mas a gramática o trata como opcional: um cabeçalho é uma convenção que o formato suporta, não uma estrutura que ele exige, e é por isso que as ferramentas precisam ser avisadas — ou precisam adivinhar — se a linha um é dado. E o tipo MIME registrado é text/csv — registrado pela própria RFC 4180 —, com parâmetros de charset deixados para o remetente.
Mais uma fronteira que a RFC traça com firmeza: o delimitador é a vírgula. Arquivos separados por ponto e vírgula são uma convenção de localidade de planilhas — comum onde a vírgula decimal é padrão —, não uma variante que o padrão reconheça. Um escritor em conformidade nunca adivinha, e um parser em conformidade ou detecta o delimitador ou é avisado, mas o próprio arquivo não carrega marca alguma de qual convenção segue.
Onde arquivos reais se desviam do padrão
O CSV real é anterior à RFC, então divergência é a norma, não a exceção. Cinco desvios explicam quase todos os incidentes do tipo 'este CSV não analisa':
Boas ferramentas trazem essas divergências à tona em vez de adivinhar em silêncio. Quando um arquivo importa — faturas, importações financeiras, qualquer coisa que um regulador possa ler —, compare-o com a gramática acima e corrija o desvio na origem, em vez de ensinar a mesma exceção a todos os parsers a jusante.
| Desvio | Origem típica | O que quebra |
|---|---|---|
| BOM UTF-8 antes do cabeçalho | Exportações 'CSV UTF-8' de planilhas | O nome da primeira coluna ganha três bytes invisíveis |
| Terminações de linha só LF ou misturadas | Ferramentas Unix; arquivos editados à mão | Divisores estritos de CRLF leem mal os limites de registro |
| Delimitador de ponto e vírgula ou tabulação | Localidades de planilha não inglesas | Parsers só de vírgula mesclam colunas |
| Aspas inconsistentes | Exportações parciais; edições manuais | Parsers que assumem aspas uniformes leem mal os valores |
| Linhas irregulares | Edições manuais; junções descuidadas | Suposições de contagem de campos; desvio de colunas a jusante |
Escrevendo CSV que sobrevive a idas e voltas
A lista de verificação do produtor confiável decorre diretamente da gramática: use aspas de forma uniforme — todos os campos, ou exatamente os campos que as regras exigem; ambos estão em conformidade, mas uniforme é mais seguro para ler de volta —, emita CRLF, escreva a linha de cabeçalho e codifique em UTF-8, aceitando que um BOM às vezes é o preço do reconhecimento por uma planilha. Faça ida e volta de tudo que importa: analise o arquivo que você acabou de escrever, confirme que cada campo corresponde aos dados de origem e só então envie. O modo de falha recorrente é sempre o mesmo — um valor contendo o delimitador que o escritor nunca colocou entre aspas.
Perguntas frequentes
O meu CSV é enviado quando uso os conversores linkados aqui?
Não — as ferramentas de CSV para JSON e de JSON para CSV deste site analisam e emitem inteiramente no seu navegador: não há etapa de envio, não há cópia no servidor, e o painel Network permanece vazio enquanto elas rodam. A Content-Security-Policy do site também bloqueia conexões de saída, então dados de clientes colados de uma planilha não podem sair da aba.
A linha de cabeçalho é obrigatória em um arquivo CSV?
Não pelo padrão: a gramática da RFC 4180 torna o primeiro registro opcional, exatamente como qualquer outro registro — um cabeçalho é uma convenção que ele permite, não uma estrutura que ele manda. Na prática, os consumidores divergem: importadores de banco de dados costumam pedir que você declare se a primeira linha é dado ou nomes, enquanto ferramentas de planilha simplesmente assumem que existe um cabeçalho.
Por que o meu arquivo CSV usa ponto e vírgula em vez de vírgula?
É uma convenção de localidade de planilhas, não um padrão diferente: localidades que usam a vírgula como separador decimal adotaram o ponto e vírgula para que números como 3,14 não colidam com separadores de campo. A RFC 4180 fixa o delimitador como a vírgula, então as ferramentas precisam detectar o arquivo, oferecer uma opção de configuração — ou analisar errado, e é por isso que uma exportação pode abrir bem localmente e quebrar a jusante.
Como colocar um caractere de aspas dentro de um campo CSV?
Dobre-a, dentro de um campo com aspas: o valor say "hi" vira "say ""hi""" no arquivo — a aspa interna dobra para um par, e onde o par dobrado encontra a aspa de fechamento você obtém três seguidas. Dobrar é o único mecanismo de escape do formato — sem barras invertidas, sem entidades. Um campo sem aspas não pode conter legalmente uma aspa, e os parsers divergem sobre perdoar isso, então a forma portátil sempre coloca o campo entre aspas e dobra as aspas internas.
Por que um registro CSV às vezes se estende por várias linhas?
Como campos com aspas podem conter quebras de linha, registros e linhas físicas são coisas diferentes. Um endereço de três linhas em um campo faz um único registro se estender por três linhas, e qualquer divisor que trate \n como limite de registro corrompe o arquivo a partir daí. Parsers em conformidade rastreiam se estão dentro de aspas — uma pequena máquina de estados, não split().
Que terminações de linha o CSV realmente exige?
A RFC 4180 especifica CRLF entre os registros — os dois bytes, 0x0D 0x0A —, com o registro final autorizado a omiti-los. O mundo real é mais frouxo: ferramentas Unix emitem LF puro, terminações misturadas aparecem em arquivos editados à mão, e a maioria dos parsers aceita as três. Escritores que precisam interoperar com planilhas devem emitir CRLF; leitores devem tolerar o resto.
Onde posso ler os padrões citados aqui?
- RFC 4180 — Formato comum e tipo MIME para arquivos de valores separados por vírgula (CSV)
Quais ferramentas relacionadas devo usar a seguir?
- Converter CSV em JSONLê a exportação da planilha, aspas e tudoAbrir
- Converter JSON em CSVTransforma registros em planilha, mesmo aninhadosAbrir
- O que é JSONGuia em linguagem simplesAbrir
- Cola de sintaxe JSONGuia em linguagem simplesAbrir
- Ferramentas JSONCompare, formate, valide e explore documentos JSON.Abrir
- Validar JSONAponta o erro com linha e coluna e corrige num cliqueAbrir