Reglas de CSV RFC 4180
RFC 4180 define CSV con precisión: registros separados por CRLF, campos separados por comas, y comillas dobles alrededor de todo campo que contenga una coma, una comilla o un salto de línea — con las comillas incrustadas duplicadas como "". La fila de cabecera es opcional, el delimitador es la coma y el tipo MIME es text/csv. La mayoría de los archivos reales lo sigue de forma laxa.
Reglas de CSV RFC 4180: explicación
CSV es más antiguo que su especificación. Los archivos de valores separados por comas llevaban décadas intercambiándose cuando RFC 4180 se publicó en octubre de 2005 como documento informativo — no un diseño nuevo, sino una descripción cuidadosa de lo que el mundo ya hacía, puesta por escrito para que los analizadores pudieran ponerse de acuerdo. Ese origen explica tanto su brevedad como su crítica más frecuente: el estándar describe la convención, y la convención es anterior al estándar.
Las reglas en sí son breves. Un archivo es una secuencia de registros; los registros se separan con CRLF; los campos se separan con comas; y todo campo que contenga una coma, una comilla doble o un salto de línea debe ir entre comillas dobles, con las comillas internas escritas por duplicado. Todo lo demás — codificaciones, cabeceras, filas irregulares — el RFC lo deja opcional o lo remite a la práctica, y por eso los archivos reales se desvían.
Esta guía recorre la gramática regla a regla con ejemplos copiables, señala los puntos donde la especificación dice «puede» y cataloga las divergencias que vas a encontrar de verdad: marcas de orden de bytes, delimitadores de punto y coma, finales de línea de Unix. Los convertidores enlazados a lo largo del texto implementan la gramática completa — campos entre comillas, saltos de línea incrustados y todo lo demás — enteramente en tu navegador.
Una gramática se ve mejor desde la salida de un analizador: pega un archivo con mucho entrecomillado en el conversor de CSV a JSON y cada regla anterior se convierte en un campo del JSON que construye — se analiza localmente y no se sube nada.
En el lado de la generación, el conversor de JSON a CSV escribe comillas exactamente donde RFC 4180 las exige, así que los viajes de ida y vuelta por hojas de cálculo sobreviven a las comas y a los saltos de línea de tus datos.
La gramática: registros, campos, CRLF
La gramática de RFC 4180 cabe en un párrafo. Un archivo consta de registros, cada uno una secuencia de campos separados por comas; los registros se separan con CRLF — los dos bytes 0x0D 0x0A, no el LF desnudo de las herramientas de Unix — y el último registro puede terminar o no con un CRLF final. Los campos pueden ir entre comillas o no: el entrecomillado es condicional, no un estilo. El boceto ABNF es file = [header CRLF] record *(CRLF record); record = field *(comma field) — fíjate en la cabecera opcional dentro de los corchetes.
Un archivo mínimo que cumple la norma
id,name,score 1,Ada,99 2,Grace,98
El mismo archivo visto como registros
registro 1: id=1, name=Ada, score=99 registro 2: id=2, name=Grace, score=98 (cada registro termina con los dos bytes CRLF; el último puede omitirlos legalmente)
Entrecomillado: la comilla doble es todo el sistema de escape
Un campo va entre comillas dobles cuando tiene que ir, y la única manera de poner una comilla doble dentro de un campo entre comillas es duplicarla — "" dentro de un campo entre comillas significa una comilla literal. Ese es el mecanismo de escape al completo: sin barras invertidas, sin entidades con nombre, sin un segundo carácter de comillas. Las comillas simples son datos corrientes, y un espacio suelto tras una coma forma parte del campo siguiente — la especificación es explícita en que los espacios se conservan y no deben recortarse.
| El valor que quieres | El campo según RFC 4180 | Por qué |
|---|---|---|
| simple | simple | Comillas opcionales — la forma sin comillas es la predeterminada |
| con coma | "con coma" | Los campos que contienen comas deben ir entre comillas |
| con " comilla | "con "" comilla" | Las comillas incrustadas se duplican dentro de las comillas |
| con salto | "con salto" | Los campos entre comillas pueden contener saltos de línea |
| con espacios | con espacios | Los espacios son datos — comillas opcionales, recortar prohibido |
Un registro, todas las reglas de entrecomillado a la vez
year,quote,note 1962,"she said ""look, no hands""","multi-word, no problem"
Campos analizados
year → 1962 quote → she said "look, no hands" note → multi-word, no problem
Saltos de línea y comas dentro de los campos
Como los campos entre comillas pueden contener saltos de línea, una línea de CSV no es un registro: un divisor ingenuo por \n corrompe cualquier archivo con campos de varias líneas — por eso los bloques de dirección, las columnas de notas y los JSON dentro de CSV hacen fracasar a los importadores ingenuos. Un analizador conforme es una pequeña máquina de estados: dentro de las comillas, las comas y los saltos de línea son datos; fuera, son separadores. No se puede escribir correctamente usando solo split().
Esa misma máquina de estados resuelve los casos límite de la comilla doble: una comilla que abre a mitad de valor, una comilla sin cerrar al final del archivo, comillas duplicadas justo al final de un campo. Son exactamente los casos que las pocas reglas de RFC 4180 pretendían resolver, y exactamente donde los analizadores hechos a mano discrepan entre sí — el origen de la mayoría de los partes del tipo «funciona en Excel, falla en el importador».
Dos registros, tres líneas físicas
name,address "Ada","12 St James Square, London" "Grace","1 Loop Rd"
Lo que produce un analizador conforme
registro 1: Ada | 12 St James Square, London registro 2: Grace | 1 Loop Rd (la coma dentro de la dirección es dato; también lo es el CRLF entre comillas)
CRLF, la cabecera opcional y text/csv
Tres detalles los fija la especificación y, con frecuencia, se da por hecho lo contrario. Los registros terminan con CRLF — aunque el último puede omitirlo, y cualquier analizador que uses a diario acepta un LF desnudo. El primer registro puede contener nombres de columna, pero la gramática lo trata como opcional: la cabecera es una convención que el formato admite, no una estructura que exija, y por eso hay que decirle a las herramientas — o deben adivinar — si la primera fila son datos. Y el tipo MIME registrado es text/csv — registrado por el propio RFC 4180 — con los parámetros charset a discreción del remitente.
Una frontera más que el RFC traza con firmeza: el delimitador es la coma. Los archivos separados por punto y coma son una convención regional de las hojas de cálculo — habitual donde la coma decimal es la norma — no una variante que el estándar reconozca. Un generador conforme nunca adivina, y un analizador conforme o detecta el delimitador o se le indica, pero el archivo en sí no lleva ninguna marca de qué convención sigue.
Dónde se desvían los archivos reales del estándar
El CSV real es anterior al RFC, así que la divergencia es la norma y no la excepción. Cinco desviaciones explican casi todos los incidentes de tipo «este CSV no se analiza»:
Las buenas herramientas muestran estas desviaciones en lugar de adivinar en silencio. Cuando un archivo importa — facturas, importaciones financieras, cualquier cosa que pueda leer un regulador — compáralo con la gramática de arriba y corrige la desviación en el origen, en vez de enseñarle la misma excepción a cada analizador posterior.
| Desviación | Origen típico | Qué se rompe |
|---|---|---|
| BOM UTF-8 delante de la cabecera | Exportaciones «CSV UTF-8» de hojas de cálculo | El primer nombre de columna gana tres bytes invisibles |
| Finales de línea solo LF o mixtos | Herramientas de Unix; archivos editados a mano | Los divisores estrictos de CRLF leen mal los límites de registro |
| Delimitador de punto y coma o tabulador | Configuraciones regionales no inglesas de hojas de cálculo | Los analizadores que solo aceptan comas fusionan columnas |
| Entrecomillado inconsistente | Exportaciones parciales; ediciones manuales | Los analizadores que asumen un entrecomillado uniforme leen mal los valores |
| Filas irregulares | Ediciones manuales; uniones descuidadas | Supuestos sobre el número de campos; columnas desplazadas más adelante |
Escribir CSV que sobreviva a los viajes de ida y vuelta
La lista de comprobación del generador fiable se deduce directamente de la gramática: entrecomilla de forma uniforme — todos los campos, o exactamente los campos que exigen las reglas; ambos son conformes, pero el uniforme es más seguro al releer —, emite CRLF, escribe la fila de cabecera y codifica en UTF-8, aceptando que un BOM a veces es el precio del reconocimiento por parte de una hoja de cálculo. Haz ida y vuelta con todo lo importante: analiza el archivo que acabas de escribir, confirma que cada campo coincide con los datos de origen y, después, envíalo. El modo de fallo recurrente es siempre el mismo — un valor que contiene el delimitador y que el generador nunca entrecomilló.
Preguntas frecuentes
¿Se sube mi CSV cuando uso los convertidores enlazados aquí?
No — las herramientas de CSV a JSON y de JSON a CSV de este sitio analizan y generan enteramente en tu navegador: no hay paso de subida, no hay copia en el servidor y el panel «Network» se queda vacío mientras funcionan. La Content-Security-Policy del sitio también bloquea las conexiones salientes, así que los datos de clientes pegados desde una hoja de cálculo no pueden salir de la pestaña.
¿Es obligatoria la fila de cabecera en un archivo CSV?
No por el estándar: la gramática de RFC 4180 hace opcional el primer registro, igual que cualquier otro — una cabecera es una convención que admite, no una estructura que imponga. En la práctica, los consumidores difieren: los importadores de bases de datos suelen pedirte que declares si la primera fila son datos o nombres, mientras que las herramientas de hojas de cálculo simplemente dan por hecho que existe una cabecera.
¿Por qué mi archivo CSV usa punto y coma en lugar de comas?
Es una convención regional de las hojas de cálculo, no otro estándar: las configuraciones regionales que usan la coma como separador decimal adoptaron el punto y coma para que números como 3,14 no choquen con los separadores de campo. RFC 4180 fija el delimitador como la coma, así que las herramientas deben detectar el archivo, ofrecer una opción de configuración — o interpretarlo mal, razón por la que una exportación puede abrirse bien localmente y fallar más adelante.
¿Cómo se mete un carácter de comilla dentro de un campo CSV?
Duplícala, dentro de un campo entre comillas: el valor say "hi" se convierte en "say ""hi""" en el archivo — la comilla interior se duplica formando pareja, y donde esa pareja duplicada se encuentra con la comilla de cierre obtienes tres seguidas. Duplicar es el único mecanismo de escape del formato — sin barras invertidas, sin entidades. Un campo sin comillas no puede contener legalmente ninguna comilla, y los analizadores discrepan sobre cuánto perdonar eso, así que la forma portable siempre entrecomilla el campo y duplica sus comillas interiores.
¿Por qué un registro CSV a veces ocupa varias líneas?
Como los campos entre comillas pueden contener saltos de línea, los registros y las líneas físicas son cosas distintas. Una dirección de tres líneas en un solo campo hace que un único registro ocupe tres líneas, y cualquier divisor que trate \n como límite de registro corrompe el archivo a partir de ahí. Los analizadores conformes llevan la cuenta de si están dentro de comillas — una pequeña máquina de estados, no split().
¿Qué finales de línea exige realmente CSV?
RFC 4180 especifica CRLF entre registros — los dos bytes, 0x0D 0x0A — y permite que el último registro los omita. El mundo real es más laxo: las herramientas de Unix emiten LF desnudo, los finales mixtos aparecen en archivos editados a mano y la mayoría de los analizadores acepta las tres variantes. Los generadores que deban interoperar con hojas de cálculo deberían emitir CRLF; los lectores deberían tolerar el resto.
¿Dónde puedo leer las normas citadas aquí?
- RFC 4180 — Formato común y tipo MIME para archivos de valores separados por comas (CSV)
¿Qué herramientas relacionadas debería usar después?
- Convertir CSV a JSONConvierte una exportación de hoja de cálculo en registrosAbrir
- Convertir JSON a CSVConvierte registros a una hoja de cálculo, anidados incluidosAbrir
- Qué es JSONGuía en lenguaje sencilloAbrir
- Hoja de trucos de sintaxis JSONGuía en lenguaje sencilloAbrir
- Herramientas JSONCompara, formatea, valida y explora documentos JSON.Abrir
- Validar JSONValida la sintaxis con línea y columna exactas y repara los erroresAbrir