Los archivos CSV explicados: separadores, comillas, codificación y Excel

Actualizado:

Un archivo CSV es texto plano: un registro por línea, con los valores separados por comas. Casi cualquier base de datos, hoja de cálculo o servicio en línea puede exportarlo, y por eso es la forma habitual de llevar una tabla de un programa a otro. También es fácil que salga mal, porque el CSV se usaba mucho antes de que alguien lo pusiera por escrito, y los programas siguen sin ponerse de acuerdo en los detalles.

Esta parte de la serie trata las reglas del CSV, los problemas de separador y de comillas que parten los valores donde no toca, la codificación de caracteres, lo que cambian las hojas de cálculo al abrir un archivo y un riesgo que conviene tener en cuenta al exportar datos que abrirán otras personas.

Las reglas que tiene el CSV

No existe una norma oficial única. Lo más parecido es el RFC 4180, publicado en octubre de 2005, que documenta el formato que usa la mayoría de los programas y registra el tipo de medio text/csv. Es un documento informativo, no un estándar de Internet, y establece estas reglas:

Todo lo demás varía. La Biblioteca del Congreso de Estados Unidos, que cataloga formatos de archivo para su conservación a largo plazo, enumera variantes habituales: punto y coma en lugar de comas, saltos de línea solo con LF o solo con CR, barras invertidas o comillas simples en lugar de comillas dobles y distintas formas de tratar los espacios. Un archivo puede ser un CSV válido para el programa que lo escribió y aun así leerse mal en otro.

Comas, punto y coma y tabuladores

Donde la coma es el separador decimal, como en buena parte de Europa y de Sudamérica, una coma entre valores chocaría con números como 1,20. Los archivos hechos allí suelen usar punto y coma. Excel sigue la configuración regional del ordenador: Microsoft indica que, si el separador decimal es la coma, Excel usa el punto y coma como separador de listas.

Es el motivo habitual de que un archivo se abra con todo en la primera columna: se escribió con un separador y se leyó con otro. La misma tabla, con coma decimal en el precio (la barra marca un salto de línea):

Los archivos separados por tabuladores evitan casi todo esto, porque los tabuladores rara vez aparecen dentro de los valores. Suelen usar la extensión .tsv o .txt en lugar de .csv.

Comillas: la regla que más importa

Muchos CSV rotos se deben a un valor que necesitaba comillas y no las tenía, o a unas comillas que nunca se cerraron. Estos ejemplos siguen el RFC 4180:

Si escribes CSV tú mismo, pon entre comillas cualquier valor que contenga el separador, comillas dobles o un salto de línea, y duplica las comillas de dentro. También se permite poner todos los valores entre comillas, lo que evita sorpresas.

Codificación: por qué las tildes se convierten en ã

Un archivo CSV no dice nada sobre su codificación de caracteres. El RFC 4180 señala que el uso habitual es US-ASCII, que no tiene letras acentuadas, y hoy la mayoría de los archivos son UTF-8. UTF-8 guarda letras como ã, é o € en dos o tres bytes. Un programa que lee esos bytes con otra codificación, como Windows-1252, muestra cada byte como un carácter aparte:

Microsoft explica que Excel abre bien un CSV en UTF-8 con doble clic solo si el archivo empieza con una marca de orden de bytes (BOM), tres bytes invisibles que anuncian UTF-8. Si no la tiene, Microsoft recomienda importarlo, con Datos > Desde texto o CSV. Si ves este mismo desorden en un archivo que creaste tú, se guardó con una codificación y se abrió con otra.

Lo que cambian las hojas de cálculo al abrir un CSV

Cuando Excel abre directamente un archivo .csv, adivina el tipo de cada valor con su configuración predeterminada. Microsoft documenta lo que eso hace con los datos que solo parecen un número o una fecha:

Valor en el CSVTras abrirlo en ExcelPor qué
0077Se quitan los ceros a la izquierda de los números.
12345678901234561234567890123450, en notación científicaExcel guarda 15 dígitos significativos; el resto pasa a ser cero.
SEPT22-SepSe lee como fecha (2 de septiembre).
MARCH11-MarSe lee como fecha (1 de marzo).

Los cambios se quedan si el archivo se vuelve a guardar. Los nombres de genes de la tabla son ejemplos reales: un estudio de 2016 en Genome Biology encontró estas conversiones en cerca de una quinta parte de los artículos que publicaban listas de genes en archivos de Excel, y en 2019 el comité de nomenclatura de genes HUGO renombró los genes SEPT y MARCH como SEPTIN y MARCHF por ese motivo. Los códigos postales, los teléfonos, los códigos de producto y los identificadores largos sufren lo mismo.

Para conservar los valores tal cual, importa el archivo en lugar de abrirlo: Datos > Desde texto o CSV, luego Editar para abrir Power Query, selecciona las columnas y cambia su tipo de datos a Texto. Microsoft también sugiere cambiar la extensión de .csv a .txt antes de abrirlo, lo que hace aparecer el asistente de importación de texto, donde eliges cómo se lee cada columna. Las versiones recientes de Excel para Microsoft 365 y Excel 2024 también tienen opciones de conversión automática de datos que permiten desactivar algunos de estos cambios.

Un riesgo al exportar: la inyección de fórmulas

Las hojas de cálculo pueden leer como fórmula un valor que empieza por =, +, - o @. Si un sitio web exporta texto escrito por usuarios, como nombres o comentarios, un valor escrito como fórmula puede ejecutarse como tal cuando alguien abre el archivo, en lugar de mostrarse como texto. El catálogo de debilidades de software de MITRE lo recoge como CWE-1236, más conocido como inyección CSV o de fórmulas.

Afecta al software que escribe archivos CSV a partir de datos no fiables. La defensa habitual es poner una comilla simple (') delante de cualquier valor que empiece por uno de esos caracteres, aunque MITRE advierte de que ninguna solución funciona en todas las hojas de cálculo. Si recibes un CSV de una fuente desconocida, míralo en un editor de texto o impórtalo como texto antes de fiarte de lo que muestra la hoja de cálculo.

¿CSV o JSON?

El CSV es una tabla plana sin tipos: cada valor es texto hasta que un programa decide otra cosa. El JSON, de la primera parte de esta serie, tiene números, true, false, null, listas y objetos anidados. El CSV ocupa menos y se abre en cualquier hoja de cálculo; el JSON es lo que usan la mayoría de las API web. Convertir de uno a otro obliga a decidir qué hacer con esas diferencias.

El conversor de nTools mantiene cada valor del CSV como texto, de modo que 007 y los identificadores largos llegan intactos, y convierte los valores JSON anidados en texto JSON dentro de una celda. Lee datos separados por comas, punto y coma o tabuladores, sigue las reglas de comillas anteriores, avisa de unas comillas sin cerrar y funciona por completo en tu navegador.

Conversor CSV ↔ JSON

Preguntas frecuentes

¿Por qué mi CSV se abre con todo en una sola columna?

El archivo usa un separador distinto del que espera el programa, normalmente punto y coma leído como si fueran comas, o al revés. Impórtalo y elige el separador en lugar de abrirlo con doble clic.

¿Por qué salen mal las tildes al abrir un CSV?

El archivo está en UTF-8 y se leyó con otra codificación. En Excel, impórtalo con Datos > Desde texto o CSV en lugar de abrirlo con doble clic, o guarda el archivo como UTF-8 con marca de orden de bytes.

¿Cómo conservo los ceros a la izquierda al abrir un CSV en Excel?

Importa el archivo en lugar de abrirlo con doble clic y cambia a Texto las columnas con códigos, códigos postales o teléfonos antes de cargarlo.

¿Un CSV puede tener varias hojas o formato?

No. Contiene una sola tabla de texto plano. Al guardar un libro como CSV, Excel guarda solo la hoja actual, y se pierde lo que el texto plano no puede contener, como el formato y los gráficos.

¿Un archivo separado por punto y coma sigue siendo un CSV?

En sentido estricto, el RFC 4180 solo describe comas, pero los archivos con punto y coma son habituales y la mayoría de los programas los aceptan si eliges el separador.

¿El conversor de nTools sube mis datos?

No. La conversión se hace en tu navegador y los datos no se envían a ningún sitio.

Siguiente en la serie Las codificaciones de texto explicadas: UTF-8, Base64 y codificación URL →

Referencias

  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

Guías relacionadas