Saltar al contenido principal

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.

Solo local

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 quieresEl campo según RFC 4180Por qué
simplesimpleComillas 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ónOrigen típicoQué se rompe
BOM UTF-8 delante de la cabeceraExportaciones «CSV UTF-8» de hojas de cálculoEl primer nombre de columna gana tres bytes invisibles
Finales de línea solo LF o mixtosHerramientas de Unix; archivos editados a manoLos divisores estrictos de CRLF leen mal los límites de registro
Delimitador de punto y coma o tabuladorConfiguraciones regionales no inglesas de hojas de cálculoLos analizadores que solo aceptan comas fusionan columnas
Entrecomillado inconsistenteExportaciones parciales; ediciones manualesLos analizadores que asumen un entrecomillado uniforme leen mal los valores
Filas irregularesEdiciones manuales; uniones descuidadasSupuestos 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)