Текстовый файл с переносами строк 0D 0D 0A - PullRequest
28 голосов
/ 09 августа 2011

Клиент отправляет мне файл .csv, где разрывы строк состоят из последовательности 0xD 0xD 0xA. Насколько я знаю, разрывы строк - либо 0xA из Mac или Unix, либо 0xD 0xA из Windows.

Является ли 0xD 0xD 0xA какой-либо известной кодировкой? Существует ли какая-либо известная последовательность сбережений, которая повреждает окончания строк файла, что вызывает это (я думаю, что клиент использует Mac)?

Файл не начинается с каких-либо маркеров кодирования, он начинается непосредственно с текстового содержимого. Текст отображается правильно, если он открыт с кодовой страницей 1252.

Ответы [ 5 ]

29 голосов
/ 09 августа 2011

CRCRLF известен как результат ошибки переноса слов в блокноте Windows XP .

Для дальнейшего использования приведу выдержку из связанного блога:

Когда вы нажимаете клавишу Enter на компьютерах с Windows, фактически сохраняются два символа: возврат каретки (CR) и перевод строки (LF). Операционная система всегда интерпретирует последовательность символов CR LF так же, как клавиша Enter: она перемещается на следующую строку. Однако, когда есть дополнительные символы CR или LF, это может иногда вызывать проблемы.

В версии Notepad для Windows XP есть ошибка, из-за которой в окне дисплея могут храниться дополнительные символы CR. Ошибка возникает в следующей ситуации:

Если у вас включена опция переноса слов, а окно дисплея содержит длинные строки, которые переносятся, то при сохранении файла Блокнот вставляет символы CR CR LF в каждую точку переноса в окне дисплея, но не в сохраненный файл.

Символы CR CR LF могут вызывать странности, если вы копируете их и вставляете в другие программы. Кроме того, они не позволяют блокноту правильно перенести строки, если вы измените размер окна Блокнота.

Вы можете удалить символы CR CR LF, отключив функцию переноса слов, а затем включив ее при необходимости. Однако при этом курсор перемещается в начало окна дисплея.

5 голосов
/ 24 февраля 2012

Файлы в кодировке Netscape ANSI используют 0D 0D 0A для разрывов строк.

2 голосов
/ 17 марта 2015

Apple Mail также делает ошибку кодирования исходящих текстовых и csv-вложений.По сути, он заменяет разделители строк на мягкие разрывы строк в каждой строке, которые в кодировке выглядят как = 0D.Если вложение отправлено по электронной почте в Outlook, Outlook видит мягкие разрывы строк, удаляет =, а затем добавляет реальные разрывы строк, то есть 0D0A, так что вы получаете 0D0D0A (cr cr lf) в конце каждой строки.Кодировка должна быть = 0D =, если это файл формата Mac (или любой другой вариант Unix) или = 0D0A =, если это файл формата Windows.

Если вы отправляете электронное письмо по электронной почте Apple (по крайней мере, из-за мавериков или yosemite), создание вложения, а не текстового или CSV-файла, является приемлемым обходным путем, например, его сжатие.

Ошибка также существуетесли вы используете виртуальную машину под управлением Parallels и отправляете по электронной почте текстовый файл оттуда, используя Apple Mail.Это кодировка электронной почты.Сформируйте предыдущие комментарии здесь, похоже, у netscape была та же проблема.

1 голос
/ 09 августа 2011

Обычно это происходит из-за ошибки в системе контроля версий или аналогичной. Это был продукт из CVS, если файл был зарегистрирован с Windows на сервер Unix, а затем извлечен снова ...

Другими словами, он просто сломан ...

0 голосов
/ 30 июля 2015

Просто скажу, что это также значение (вид ...), которое возвращается из php при:

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