Текстовый файл с разрывами 0D 0D 0A
Клиент отправляет мне CSV файл, где разрывы строк состоят из последовательности 0xD 0xD 0xA
. Насколько мне известно, разрывы строк - это 0xA
из Mac или Unix или 0xD 0xA
из Windows.
Является ли 0xD 0xD 0xA
какой-либо известной кодировкой? Есть ли какая-либо известная последовательность сбережений, которая искажает окончания строки файла, которая вызывает это (я думаю, что клиент использует Mac)?
Файл не начинается с каких-либо маркеров кодировки, он начинается с текстового содержимого напрямую. Текст отображается правильно, если он открыт с кодовой страницей 1252.
Ответы
Ответ 1
CRCRLF известен как результат ошибки Windows XP notepad.
Для справки в будущем здесь выдержка релевантности из связанного блога:
Когда вы нажимаете клавишу Enter на компьютерах Windows, на самом деле сохраняются два символа: возврат каретки (CR) и линия (LF). Операционная система всегда интерпретирует последовательность символов CR LF так же, как клавиша Enter: она переходит к следующей строке. Однако, когда есть дополнительные символы CR или LF, это может иногда вызывать проблемы.
В версии Notepad для Windows XP есть ошибка, которая может привести к добавлению лишних символов CR в окне дисплея. Ошибка происходит в следующей ситуации:
Если у вас включен параметр "перенос слов", а окно отображения содержит длинные строки, которые обертываются, то сохранение файла заставляет Notepad вставлять символы CR CR LF в каждую точку переноса в окне отображения, но не в сохраненном файл.
Символы CR CR LF могут вызывать странности, если вы копируете и вставляете их в другие программы. Они также предотвращают неправильное перематывание строк в Notepad, если вы измените размер окна "Блокнот".
Вы можете удалить символы CR CR LF, отключив функцию обертывания слов, а затем, при желании, снова включите ее. Тем не менее, курсор перемещается в начале окна дисплея, когда вы это делаете.
Ответ 2
Закодированные файлы Netscape ANSI используют 0D 0D 0A для разрывов строк.
Ответ 3
Это обычно связано с ошибкой в системе контроля версий или аналогичной. Это был продукт CVS, если файл был проверен с Windows на Unix-сервер, а затем снова выгружен...
Другими словами, он просто сломан...
Ответ 4
Сообщалось также, что почта Apple сделала ошибку кодирования для текста и вложений csv исходящими. По сути, он заменяет терминаторы строк мягкими разрывами строк на каждой строке, которые выглядят как = 0D в кодировке. Если приложение отправлено по электронной почте в Outlook, Outlook видит, что разрывы в мягких линиях удаляются, а затем добавляет реальные разрывы строк, то есть 0D0A, поэтому вы получаете 0D0D0A (cr cr lf) в конце каждой строки. Кодировка должна быть равна = 0D = если это файл формата Mac (или любой другой вкус unix) или = 0D0A = если это файл формата Windows.
Если вы отправляете сообщения электронной почты из почты Apple (по крайней мере, в mavericks или yosemite), что делает вложение не текстовым или CSV файлом, это приемлемое решение, например. сжать его.
Ошибка также существует, если вы запускаете виртуальную машину Windows под параллелью и отправляете по электронной почте текстовый файл с помощью apple mail. Это кодировка электронной почты. Форма предыдущих комментариев здесь, похоже, что у netscape была та же проблема.
Ответ 5
Просто говоря, это также значение (вид...), которое возвращается из php:
<?php var_dump(urlencode(PHP_EOL)); ?>
// Prints: string '%0D%0A' (length=6)-- used in 5.4.24 at least