Versión redactada de las preguntas frecuentes de WinSCP ¿Por qué los saltos de línea del archivo de texto son incorrectos después de transferir o editar el archivo?
Ver particularmente su Problemas conocidos sección.
Después de transferir o editar un archivo, puede ocurrir que los saltos de línea sean incorrectos, lo que puede manifestarse como:
- Los saltos de línea se pierden. Parece que si todo el contenido del archivo está en una sola línea.
- Los saltos de línea están duplicados. Parece que hay una línea vacía adicional entre cada línea.
- Hay un símbolo / personaje extraño al final de cada línea.
Formatos de archivo de texto
Diferentes plataformas (sistemas operativos) utilizan un formato diferente de archivos de texto. Los formatos más comunes son Unix y Windows. Una diferencia principal es que se utilizan caracteres o secuencias de caracteres diferentes para indicar el final de una línea. En Unix, es el personaje LF ( \n
, 0A
o 10 en decimal). En Windows, es una secuencia de dos caracteres, CR y LF ( \r
+ \n
, 0D
+ 0A
o 13 + 10 en decimal).
Si bien muchas aplicaciones y sistemas hoy en día pueden funcionar con ambos formatos, algunos requieren un formato específico. Al presentar un archivo en otro formato, no lo muestran correctamente, como se describe anteriormente.
Modo de transferencia de texto / ASCII
Por esta razón, los clientes y servidores de transferencia de archivos admiten texto / ASCII modo de transferencia . Al transferir un archivo en este modo, el archivo se convierte (idealmente) de un formato nativo a un sistema de origen, a un formato nativo de un sistema de destino. Por ejemplo, al cargar un archivo de texto utilizando el modo de texto de Windows al sistema Unix, los finales de línea de archivo se convierten de CR + LF a LF.
WinSCP utiliza por defecto el modo de transferencia binario para todos los archivos. Aprende a configurarlo para utilizar el modo de transferencia de texto / ASCII . También es posible que necesite configurar Formato de archivo de texto del lado del servidor correcto .
Por el contrario, cuando desea forzar a WinSCP a usar un modo binario, incluso cuando edita archivos en un editor de texto, tiene que usar un editor de texto externo (el editor interno de WinSCP no admite el formato de archivo Unix) y configurar WinSCP No forzar el modo de texto para archivos editados. . También asegúrese de que su editor de texto externo guarde el archivo en el formato que necesita (la mayoría de los editores de texto hoy en día admiten diferentes formatos de archivo de texto, no solo un formato nativo de la plataforma en la que se ejecuta el editor).
Problemas conocidos con el modo de transferencia
- Servidor FTP de Pure-FTPd: al descargar un archivo con finales de línea de Windows (CR + LF) en modo texto / ASCII, el servidor reemplaza LF con CR + LF, lo que da como resultado un CR + CR + LF incorrecto. Al abrir dicho archivo en un editor interno de WinSCP, el editor interpreta la secuencia como dos finales de línea (CR y CR + LF) que dan como resultado una línea en blanco después de cada línea de contenido. Cuando se guarda el archivo, el editor interno guarda dos finales de línea de Windows CR + LF y CR + LF. Al subir, se convierten en dos LF. Una solución es usar un editor externo y asegurarse de que WinSCP no fuerza el modo de texto para archivos editados .
Depuración de conversión de archivos de texto
Si habilitar (o deshabilitar) el modo de transferencia de texto / ASCII no ayuda con el problema y su archivo transferido / editado aún es percibido incorrectamente por el sistema de destino, debe averiguar en qué paso se convirtió incorrectamente el archivo (o no lo ha hecho). se convirtió).
Para detectar los finales de línea utilizados por un archivo en Windows, use el siguiente comando en la consola de PowerShell para mostrar el volcado hexadecimal de los primeros 100 caracteres del archivo dado ( example.txt
):
Get-Content -Encoding Byte -TotalCount 100 example.txt |% {Write-Host ("{0:x2} " -f $_) -NoNewline}; Write-Host
Para un archivo con los siguientes contenidos en formato Windows.
One
Two
muestra:
4f 6e 65 0d 0a 54 77 6f 0d 0a
Nota las dos secuencias 0d 0a
(CR + LF) que indica el formato de Windows.
Para detectar los finales de línea utilizados por un archivo en el sistema Unix / Linux, use el comando:
xxd example.txt | head
(Las alternativas son hexdump example.txt | head
o od example.txt | head
.)
Para el mismo archivo anterior, solo en formato Unix, muestra:
0000000: 4f6e 650a 5477 6f0a One.Two.
Nota el caracter 0a
(LF) que indica el formato Unix.
Si no tiene acceso de shell al sistema remoto, descargue el archivo con codificación binaria y use el comando PowerShell en una copia local idéntica a la del binario.
Utilice estas técnicas para detectar qué formato tienen los archivos de origen y de destino. Al editar un archivo, detecte también el formato de una copia temporal local del archivo editado como lo guarda el editor. Ver preferencias para Una ubicación de las copias temporales. .
Solicitando Apoyo
Cuando lo anterior no le ayuda a entender el problema y decide buscar más ayuda, incluya todos sus hallazgos, incluidas las copias del archivo de origen y de destino. Al editar un archivo, incluya también una copia temporal local guardada por el editor. Lo ideal es comprimir (ZIP) los archivos para evitar que su navegador altere el formato del archivo, al adjuntar los archivos para admitir la solicitud.
(Soy el autor de WinSCP)