Открытие файла в текстовом режиме может привести к потере данных в Python: почему? - PullRequest
4 голосов
/ 18 мая 2011

В документации для codecs.open() упоминается, что

Файлы всегда открываются в двоичном режиме, даже если двоичный режим не был указан. Это сделано, чтобы избежать потери данных из-за кодирования с использованием 8-битных значений.

Как использование текстового режима для файла может привести к "потере данных"? Звучит так, будто открытие файла в текстовом режиме может обрезать байты до 7 бит, но я не могу найти упоминаний об этом в документации: текстовый режим описан только как способ преобразования строк с нет упоминаний о возможной потере данных. Итак, на что ссылается документация для codecs.open()?

PS : Хотя понятно, что автоматическое преобразование новой строки в платформо-зависимое кодирование новой строки требует некоторой осторожности, вопрос заключается в том, что конкретно относится к 8-битным кодировкам. Я бы предположил, что только некоторые кодировки совместимы с автоматическим преобразованием новой строки независимо от того, являются ли они 8- или 7-битными кодировками. Итак, почему в документации codecs.open() выделено 8-битное кодирование?

1 Ответ

5 голосов
/ 18 мая 2011

Я думаю, что они имеют в виду, что некоторые кодировки используют все 8 бит по крайней мере в некоторых байтах, так что возможны все 256 значений (и, в частности, возможно получить 0x0A или 0x0D, которые не означают CR или LF).

Напротив, в файле UTF-8 символы CR и LF (и все другие символы ниже 0x80) всегда транслируются сами по себе.Они не могут появляться как часть кодировки какого-либо другого символа.

...