2011-08-09 19 views
23

Un cliente me está enviando un archivo .csv donde los saltos de línea se componen de la secuencia 0xD 0xD 0xA. Por lo que sé, los saltos de línea son 0xA desde Mac o Unix o 0xD 0xA desde Windows.Archivo de texto con 0D 0D 0A saltos de línea

¿Es el 0xD 0xD 0xA cualquier codificación conocida? ¿Existe alguna secuencia conocida de ahorros que corrompa las terminaciones de línea de un archivo que causa esto (creo que el cliente usa una Mac)?

El archivo no comienza con ningún marcador de codificación, comienza con el contenido del texto directamente. El texto se muestra correctamente si se abre con la página de códigos 1252.

Respuesta

24

El CRCRLF se conoce como el resultado de un Windows XP notepad word wrap bug.

Para futuras referencias, aquí está un extracto de relevancia desde el blog vinculado:

Cuando se presiona la tecla Enter en ordenadores Windows, dos caracteres se almacenan realmente: un retorno de carro (CR) y un avance de línea (LF). El sistema operativo siempre interpreta la secuencia de caracteres CR LF de la misma manera que la tecla Intro: se mueve a la siguiente línea. Sin embargo, cuando hay caracteres CR o LF adicionales por sí solos, esto a veces puede causar problemas.

Existe un error en la versión de Windows XP del Bloc de notas que puede provocar que se almacenen caracteres CR adicionales en la ventana de visualización. El error ocurre en la siguiente situación:

Si tiene activada la opción de ajuste de palabra y la ventana de visualización contiene líneas largas que se envuelven, guardar el archivo hace que Notepad inserte los caracteres CR CR LF en cada punto de ajuste en la ventana de visualización, pero no en el archivo guardado.

Los caracteres CR CR LF pueden causar extravagancias si los copia y los pega en otros programas. También evitan que el Bloc de notas reenvuelva las líneas correctamente si cambia el tamaño de la ventana del Bloc de notas.

Puede eliminar los caracteres CR CR LF apagando la función de ajuste de texto y volviendo a encenderla si lo desea. Sin embargo, el cursor se reposiciona al comienzo de la ventana de visualización cuando hace esto.

1

Esto normalmente proviene de un error en el sistema de control de revisiones, o similar. Este fue un producto de CVS, si el archivo se registró a partir de Windows para el servidor Unix, y después se comprueba de nuevo ...

En otras palabras, sólo se rompe ...

archivos
+0

descubrí que cuando me la salida en TortoiseCVS en el sistema Windows, el valor predeterminado es utilizar Terminaciones de línea de Windows. Esto provocó que '0D 0A' se traduzca a' 0D 0D 0A' (¿por qué TCVS no respeta el '0D 0A' existente al expandir' 0A' a '0D 0A' ?!) y terminé con un espacio de doble línea en Eclipse que Me cansé de limpiar. Se corrigió el problema eligiendo la opción "Usar finales de línea UNIX" al momento de pagar. – ADTC

3

Netscape ANSI codificados use 0D 0D 0A para sus saltos de línea.

0

También se sabe que el correo de Apple produce un error de codificación en los archivos adjuntos de texto y csv. En esencia, reemplaza los terminadores de línea con saltos de línea suaves en cada línea, que se ven como = 0D en la codificación. Si el archivo adjunto se envía por correo electrónico a Outlook, Outlook ve la línea suave se rompe, elimina el = a continuación agrega saltos de línea real, es decir, 0D0A para que obtenga 0D0D0A (cr cr lf) al final de cada línea. La codificación debe ser = 0D = si es un archivo de formato mac (o cualquier otro sabor de Unix) o = 0D0A = si es un archivo de formato de Windows.

Si está enviando correos electrónicos de Apple (por lo menos, mavericks o yosemite), hacer que el archivo adjunto no sea un archivo de texto o csv es una solución aceptable, por ej. comprimirlo

El error también existe si está ejecutando una máquina virtual de Windows en paralelo y envía un archivo txt desde allí mediante correo de Apple. Es la codificación del correo electrónico. Forma los comentarios anteriores aquí, parece que netscape tenía el mismo problema.

0

sólo decir, este es también el valor (tipo de ...) que se devuelve desde php en:

<?php var_dump(urlencode(PHP_EOL)); ?> 
    // Prints: string '%0D%0A' (length=6)-- used in 5.4.24 at least 
Cuestiones relacionadas