Arquivos CSV explicados: separadores, aspas, codificação e Excel

Atualizado:

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:

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):

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:

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:

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 CSVDepois de abrir no ExcelPor quê
0077Os zeros à esquerda dos números são removidos.
12345678901234561234567890123450, em notação científicaO Excel guarda 15 dígitos significativos; o resto vira zero.
SEPT22-SepLido como data (2 de setembro).
MARCH11-MarLido 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.

Conversor CSV ↔ JSON

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

  1. RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
  2. Library of Congress — CSV, Comma Separated Values (RFC 4180)
  3. Microsoft Support — Import or export text (.txt or .csv) files
  4. Microsoft Support — Keeping leading zeros and large numbers
  5. Microsoft Support — Opening CSV UTF-8 files correctly in Excel
  6. Ziemann, Eren and El-Osta — Gene name errors are widespread in the scientific literature (Genome Biology, 2016)
  7. HUGO Gene Nomenclature Committee — Summer newsletter 2020
  8. MITRE — CWE-1236: Improper Neutralization of Formula Elements in a CSV File

Guias relacionados