La codificación de CSV y el misterioso BOM
Excel abre un archivo UTF-8 sin BOM con la página de códigos heredada del sistema y «Canción» pasa a «Canción». No es un fallo de Excel ni del archivo: un CSV, sencillamente, no tiene dónde decir en qué codificación está.
Un CSV no tiene sitio para la codificación
XML declara su codificación en el prólogo, JSON es por norma siempre UTF-8 y DBF guarda un código en su encabezado. Un CSV no tiene nada: es solo texto con comas. El programa que lo lee debe adivinar o preguntar.
Excel no pregunta. Con un doble clic usa la página de códigos ANSI del sistema: windows-1252 en una instalación de Windows en español. Todo lo que no esté en esa codificación sale como papilla.
Qué es el BOM y por qué ayuda
El BOM (byte order mark) son tres bytes de servicio, EF BB BF, al principio de un archivo. Formalmente significan «esto es UTF-8» y Excel los entiende: un archivo con BOM se abre bien incluso con un doble clic.
La otra cara: todos los demás también ven esos bytes. Un programa que no conoce el BOM lee el nombre de la primera columna como id con un carácter invisible delante, lo que rompe la correspondencia de campos. Es la causa clásica del misterioso «no se encuentra la columna id».
La regla es sencilla: use BOM si el archivo es para una persona con Excel; no lo use si es para un programa.
Detectar la codificación por el contenido
UTF-8 se reconoce por su estructura: sus bytes altos siguen secuencias estrictamente definidas. Si el archivo cumple esa regla y además contiene bytes no ASCII, es casi seguro UTF-8.
Si la estructura no encaja, quedan las candidatas de un byte y decide el contenido: el texto se decodifica con cada candidata y gana la que se lee como texto real, sin caracteres de dibujo de cajas ni caracteres de control o de sustitución. Cuando eso no es concluyente, puede cambiar la codificación a mano sin volver a guardar el archivo. El mismo mecanismo se usa para DBF; vea caracteres raros en DBF.
El delimitador: la otra mitad del mismo problema
El estándar dice «coma», pero en las regiones donde la coma es el separador decimal (España, Argentina, Chile, Colombia, Alemania, Francia, Brasil y muchas más), Excel espera por defecto un punto y coma. De ahí los archivos que se abren en una sola columna: vea el CSV se abre en una sola columna en Excel.
El delimitador se puede detectar con fiabilidad: se prueban las candidatas y se elige la que da a cada fila el mismo número de campos, contando bien las comillas. Si no hay una respuesta segura, es más honesto decirlo y dejar que el usuario cambie a mano que mostrar en silencio una tabla equivocada.
Cómo guardar para que nadie tenga problemas
- Para intercambio entre programas: UTF-8 sin BOM, coma como delimitador, fin de línea
\n. - Para una persona que usa Excel: UTF-8 con BOM y punto y coma si su región usa la coma decimal.
- Para sistemas antiguos: windows-1252 (o la página de códigos que esperen) y punto y coma. Compruebe que cabe cada carácter: las comillas tipográficas, los guiones largos y el símbolo del euro faltan en algunas páginas de códigos.
En el cuadro de exportación de Tabulens estas son combinaciones ya hechas y no una lista abstracta de codificaciones.
Preguntas frecuentes
¿Por qué mi archivo pasó a windows-1252 al guardarlo desde Excel?
Excel guarda el «CSV» normal en la página de códigos del sistema. Para UTF-8, elija «CSV UTF-8 (delimitado por comas)» como opción aparte.
¿Puedo quitar el BOM?
Sí, son solo los tres primeros bytes del archivo. Cualquier editor que permita elegir la codificación puede guardar sin él.
¿Y si el archivo mezcla codificaciones?
Divídalo por origen y procese las partes por separado: una única tabla no se puede recodificar cuando las codificaciones están mezcladas dentro.
Gratis para usar. Su archivo no se sube a ningún servidor. Versión para Windows — 4.6 MB, sin instalación: detalles. Pro — 29 USD una sola vez: precio.