Arquivos CSV explicados: separadores, aspas, codificação e Excel
Um arquivo CSV é texto puro: um registro por linha, com os valores separados por vírgulas. Quase todo banco de dados, planilha e serviço online consegue exportá-lo, e por isso ele é o jeito mais comum de levar uma tabela de um programa para outro. Também é fácil dar errado, porque o CSV já era usado muito antes de alguém colocá-lo no papel, e os programas ainda não concordam nos detalhes.
Esta parte da série trata das regras do CSV, dos problemas de separador e de aspas que dividem os valores no lugar errado, da codificação de caracteres, do que as planilhas mudam ao abrir um arquivo e de um risco que vale a pena conhecer quando você exporta dados que outras pessoas vão abrir.
As regras que o CSV realmente tem
Não existe um padrão oficial único. O mais próximo é o RFC 4180, publicado em outubro de 2005, que documenta o formato usado pela maioria dos programas e registra o tipo de mídia text/csv. É um documento informativo, não um padrão da internet, e define estas regras:
- Cada registro fica em sua própria linha, terminada por uma quebra de linha (CR LF). A última linha pode terminar com uma ou não.
- A primeira linha pode ser um cabeçalho com os nomes das colunas, no mesmo formato das demais.
- Os valores são separados por vírgulas, toda linha deveria ter o mesmo número de valores e não há vírgula depois do último.
- Os espaços fazem parte do valor: em Ana, Lisboa o segundo valor começa com um espaço.
- Um valor que contém vírgula, aspas duplas ou quebra de linha deveria ficar entre aspas duplas.
- Dentro de um valor entre aspas, as aspas duplas são escritas duas vezes.
Todo o resto varia. A Biblioteca do Congresso dos Estados Unidos, que cataloga formatos de arquivo para preservação de longo prazo, lista variações comuns: ponto e vírgula no lugar de vírgulas, quebras de linha só com LF ou só com CR, barras invertidas ou aspas simples no lugar de aspas duplas e jeitos diferentes de tratar os espaços. Um arquivo pode, portanto, ser um CSV válido para o programa que o gerou e ainda assim ser lido errado por outro.
Vírgulas, ponto e vírgula e tabulações
Onde a vírgula é o separador decimal, como no Brasil e em boa parte da Europa, uma vírgula entre os valores bateria de frente com números como 1,20. Os arquivos feitos nesses lugares costumam usar ponto e vírgula. O Excel segue as configurações regionais do computador: a Microsoft explica que, quando o separador decimal é a vírgula, o Excel usa o ponto e vírgula como separador de lista.
Esse é o motivo mais comum para um arquivo abrir com tudo na primeira coluna: ele foi escrito com um separador e lido com outro. A mesma tabela, com vírgula decimal no preço (a barra marca uma quebra de linha):
nome;preço / Pão;1,20Separado por ponto e vírgula: duas colunas, nome e preço, e 1,20 continua sendo um valor só.nome,preço / Pão,"1,20"Separado por vírgulas: o preço precisa ficar entre aspas, senão 1 e 20 viram dois valores.nome;preço / Pão;1,20 lido com vírgulasO cabeçalho vira uma única coluna chamada nome;preço, e a vírgula de 1,20 divide a linha em Pão;1 e 20.
Arquivos separados por tabulação evitam quase tudo isso, porque tabulações raramente aparecem dentro dos valores. Eles costumam usar a extensão .tsv ou .txt em vez de .csv.
Aspas: a regra que mais importa
Muitos CSV quebrados vêm de um valor que precisava de aspas e ficou sem, ou de aspas que nunca foram fechadas. Estes exemplos seguem o RFC 4180:
"Lisboa, Portugal"Um valor só. Sem as aspas, ele seria dividido em duas colunas, Lisboa e Portugal."Ela disse ""oi"""É lido como Ela disse "oi": dentro das aspas, cada "" vale por uma aspa dupla."linha um / linha dois"Um valor só com uma quebra de linha dentro (aqui, a barra). Programas que leem o arquivo linha por linha, sem olhar as aspas, dividem esse valor em dois registros."nunca fechadaUma aspa sem par pode engolir o resto do arquivo num valor só. Um leitor cuidadoso aponta isso como erro.
Se você mesmo escreve CSV, coloque entre aspas qualquer valor que contenha o separador, aspas duplas ou quebra de linha, e duplique as aspas que estiverem dentro dele. Também é permitido colocar todos os valores entre aspas, o que evita surpresas.
Codificação: por que os acentos viram ã
Um arquivo CSV não diz nada sobre sua codificação de caracteres. O RFC 4180 observa que o uso comum é US-ASCII, que não tem letras acentuadas, e hoje a maioria dos arquivos é UTF-8. O UTF-8 guarda letras como ã, é ou € em dois ou três bytes. Um programa que lê esses bytes com outra codificação, como a Windows-1252, mostra cada byte como um caractere separado:
Pão → PãoOs dois bytes de ã, lidos como Windows-1252.café → caféO mesmo acontece com o é.€ → €O símbolo do euro ocupa três bytes em UTF-8, então vira três caracteres.
A Microsoft explica que o Excel só abre corretamente um CSV em UTF-8 com dois cliques se o arquivo começar com uma marca de ordem de bytes (BOM), três bytes invisíveis que anunciam o UTF-8. Sem ela, a Microsoft recomenda importar o arquivo, com Dados > De texto/CSV. Se você vê essa mesma bagunça num arquivo que você mesmo criou, ele foi salvo numa codificação e aberto em outra.
O que as planilhas mudam ao abrir um CSV
Quando o Excel abre um arquivo .csv diretamente, ele adivinha o tipo de cada valor com as configurações padrão. A Microsoft documenta o que isso faz com dados que só parecem um número ou uma data:
| Valor no CSV | Depois de abrir no Excel | Por quê |
|---|---|---|
| 007 | 7 | Os zeros à esquerda dos números são removidos. |
| 1234567890123456 | 1234567890123450, em notação científica | O Excel guarda 15 dígitos significativos; o resto vira zero. |
| SEPT2 | 2-Sep | Lido como data (2 de setembro). |
| MARCH1 | 1-Mar | Lido como data (1º de março). |
As mudanças ficam se o arquivo for salvo de novo. Os nomes de genes da tabela são exemplos reais: um estudo de 2016 na Genome Biology encontrou essas conversões em cerca de um quinto dos artigos que publicavam listas de genes em arquivos do Excel, e em 2019 o comitê de nomenclatura de genes HUGO renomeou os genes SEPT e MARCH para SEPTIN e MARCHF por causa disso. CEPs, telefones, códigos de produto e identificadores longos sofrem o mesmo.
Para manter os valores como estão, importe o arquivo em vez de abri-lo: Dados > De texto/CSV, depois Editar para abrir o Power Query, selecione as colunas e mude o tipo de dados para Texto. A Microsoft também sugere renomear o arquivo de .csv para .txt antes de abrir, o que faz aparecer o assistente de importação de texto, onde você escolhe como cada coluna é lida. As versões recentes do Excel para Microsoft 365 e do Excel 2024 também têm opções de conversão automática de dados que permitem desligar algumas dessas mudanças.
Um risco ao exportar: injeção de fórmulas
As planilhas podem ler como fórmula um valor que começa com =, +, - ou @. Se um site exporta texto digitado por usuários, como nomes ou comentários, um valor escrito como fórmula pode ser executado como tal quando alguém abre o arquivo, em vez de aparecer como texto. O catálogo de fraquezas de software da MITRE registra isso como CWE-1236, mais conhecido como injeção de CSV ou de fórmulas.
Isso diz respeito a programas que geram arquivos CSV a partir de dados não confiáveis. A defesa mais comum é colocar um apóstrofo (') na frente de qualquer valor que comece com um desses caracteres, embora a MITRE observe que nenhuma solução funciona em todas as planilhas. Se você recebe um CSV de uma fonte desconhecida, olhe o arquivo num editor de texto ou importe como texto antes de confiar no que a planilha mostra.
CSV ou JSON?
O CSV é uma tabela plana sem tipos: cada valor é texto até um programa decidir o contrário. O JSON, tema da primeira parte desta série, tem números, true, false, null, listas e objetos aninhados. O CSV é menor e abre em qualquer planilha; o JSON é o que a maioria das APIs da web usa. Converter de um para o outro exige decidir o que fazer com essas diferenças.
O conversor do nTools mantém cada valor do CSV como texto, então 007 e identificadores longos chegam intactos, e transforma valores JSON aninhados em texto JSON dentro de uma única célula. Ele lê dados separados por vírgula, ponto e vírgula ou tabulação, segue as regras de aspas acima, avisa quando uma aspa nunca é fechada e funciona inteiramente no seu navegador.
Perguntas frequentes
Por que meu CSV abre com tudo numa coluna só?
O arquivo usa um separador diferente do que o programa espera, geralmente ponto e vírgula lido como se fossem vírgulas, ou o contrário. Importe o arquivo e escolha o separador em vez de abrir com dois cliques.
Por que os acentos aparecem errados ao abrir um CSV?
O arquivo é UTF-8 e foi lido com outra codificação. No Excel, importe com Dados > De texto/CSV em vez de abrir com dois cliques, ou salve o arquivo como UTF-8 com marca de ordem de bytes.
Como mantenho os zeros à esquerda ao abrir um CSV no Excel?
Importe o arquivo em vez de abrir com dois cliques e mude para Texto as colunas com códigos, CEPs ou telefones antes de carregar.
Um arquivo CSV pode ter várias abas ou formatação?
Não. Ele guarda uma única tabela de texto puro. Quando você salva uma pasta de trabalho como CSV, o Excel salva só a planilha atual, e o que o texto puro não comporta, como formatação e gráficos, se perde.
Um arquivo separado por ponto e vírgula ainda é um CSV?
A rigor, o RFC 4180 descreve só vírgulas, mas arquivos com ponto e vírgula são comuns e a maioria dos programas os aceita quando você escolhe o separador.
O conversor do nTools envia meus dados para algum lugar?
Não. A conversão acontece no seu navegador e os dados não são enviados para lugar nenhum.
Próximo da série Codificações de texto explicadas: UTF-8, Base64 e codificação de URL →
Referências
- RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
- Library of Congress — CSV, Comma Separated Values (RFC 4180)
- Microsoft Support — Import or export text (.txt or .csv) files
- Microsoft Support — Keeping leading zeros and large numbers
- Microsoft Support — Opening CSV UTF-8 files correctly in Excel
- Ziemann, Eren and El-Osta — Gene name errors are widespread in the scientific literature (Genome Biology, 2016)
- HUGO Gene Nomenclature Committee — Summer newsletter 2020
- MITRE — CWE-1236: Improper Neutralization of Formula Elements in a CSV File
Guias relacionados
- Endereços IP explicados: IPv4, IPv6 e as faixas reservadas
- Sub-redes e CIDR explicados: prefixos, máscaras e hosts utilizáveis
- Registros DNS explicados: A, AAAA, CNAME, MX, TXT e NS
- Um site está fora do ar ou é só com você? Como verificar, passo a passo
- Códigos de status HTTP e erros da Cloudflare: o que significam 403, 404, 429, 500, 503 e 521
- Timestamps Unix e fusos horários explicados
- Contagem de datas: dias entre datas, anos bissextos e semanas ISO
- Formatos de imagem explicados: JPEG, PNG, WebP, AVIF e HEIC
- O tamanho de uma imagem explicado: pixels, DPI, peso e qualidade
- Fotos de celular explicadas: HEIC, metadados EXIF e sua privacidade
- Força de senhas explicada: comprimento, entropia e frases-senha
- Funções de hash explicadas: SHA-256, checksums e hash de senhas
- JSON Web Tokens explicados: claims, assinaturas e validação segura
- UUIDs explicados: v4, v7 e como escolher a versão certa
- QR codes explicados: capacidade, correção de erros e tamanho de impressão
- Porcentagens e IVA explicados: somar, tirar e acumular
- Erros comuns em JSON e como corrigi-los
- Codificações de texto explicadas: UTF-8, Base64 e codificação de URL
- Edição de PDFs no navegador: o que se mantém ao juntar, dividir e converter