Todos los artículos

CRLF frente a LF: por qué los caracteres de fin de línea aún importan

Quien haya subido alguna vez un archivo PHP a un hosting compartido por FTP conoce el problema sin saber su nombre técnico: subir en modo ASCII «traduce» los finales de línea al vuelo entre sistemas, y basta un cliente FTP mal configurado en modo binario para que un script que funcionaba en local falle en el servidor con errores extraños.

De dónde viene la divergencia

Unix y macOS usan un único carácter: LF (line feed, \n). Windows heredó de las viejas teleimpresoras un par de caracteres: CRLF (carriage return + line feed, \r\n): uno devuelve el carro al inicio de la línea, el otro baja a la línea siguiente, imitando literalmente una máquina de escribir.

Por qué sigue siendo importante

  • Git. Si un archivo con CRLF entra en un repositorio donde el resto usa LF, git puede mostrar «todo el archivo cambiado» aunque solo se haya editado una línea, porque técnicamente cambiaron los finales de todas las líneas.
  • Scripts con shebang. Un script de shell de Unix guardado con finales CRLF puede fallar al ejecutarse en el servidor, porque el intérprete ve un carácter \r sobrante en la primera línea.
  • Comparación de cadenas en código. Una línea leída de un archivo con CRLF puede no coincidir al compararla con una cadena LF esperada, aunque el texto visible parezca igual.

Cómo se resuelve

Git tiene una opción (core.autocrlf) que convierte automáticamente los finales de línea al hacer checkout/commit. En proyectos con colaboradores en Windows y Linux a la vez, es más fiable fijar el estilo directamente en un archivo .gitattributes del repositorio, para que no dependa de la configuración local de cada persona.

Para qué sirve la conversión manual

  • Corregir un archivo que entró en el repositorio con el estilo de fin de línea equivocado.
  • Preparar un script para un servidor Linux que se editó en un editor de Windows antes de subirlo por FTP.
  • Diagnosticar por qué una comparación de texto entre dos archivos aparentemente idénticos muestra una diferencia.

Finales mixtos en un mismo archivo

Un archivo editado en varios editores o en distintos sistemas operativos puede contener CRLF y LF a la vez — parte de las líneas con un estilo, parte con otro. Es el caso más traicionero: la conversión «a LF» a primera vista no cambia nada en las líneas que ya tenían LF, pero es importante aplicar la transformación a todo el archivo, no solo a las líneas visiblemente «sospechosas», o el problema seguirá oculto.

Probar la herramienta