19
  1. Мне было интересно, если некоторые текстовые файлы хранят свой метод кодирования вдоль их текстового содержимого для последующего декодирования?
  2. Или работа средства просмотра текста состоит в том, чтобы угадать метод кодирования для данного текстового файла, и угадывание не всегда может быть правильным? Если да, то как программа для просмотра текста догадывается об этом?

2 ответа2

18

Мне было интересно, если некоторые текстовые файлы хранят свой метод кодирования вдоль их текстового содержимого для последующего декодирования?

Ответ Марка Шимански правильный: в явном текстовом файле нет явной информации о кодировании - это определение "простого текстового файла", под "обычным" понимается тот факт, что в файле нет метаданных.

Однако некоторые приложения размещают метку порядка байтов (BOM) в текстовых файлах, закодированных как UTF-16 или UTF-32/UCS-4. На самом деле спецификация не предназначена для указания кодировки (она указывает порядок байтов, как следует из названия), но многие приложения будут использовать наличие спецификации для распознавания UTF-16/UTF-32, поэтому она служит индикатором кодирования.

Или работа средства просмотра текста состоит в том, чтобы угадать метод кодирования для данного текстового файла, и угадывание не всегда может быть правильным? Если да, то как программа для просмотра текста догадывается об этом?

Да, просмотрщик текста может только догадываться. Обычно используется некоторая эвристика:

  • В некоторых кодировках (особенно в UTF-8) не все последовательности байтов являются действительными. Таким образом, приложение может просто попытаться декодировать файл как UTF-8. Если это успешно, файл, вероятно, UTF-8; если это не удается найти неправильную последовательность байтов, это не так. Вот как, например, vim работает по умолчанию: сначала он попытается использовать UTF-8 при чтении файла; если это не удается, он возвращается к ISO-8859-1.
  • В большинстве старых 8-битных кодировок допустима любая последовательность байтов. В этом случае иногда можно угадать кодировку, посмотрев на гистограмму байтов (частота различных байтов / последовательностей байтов). Internet Explorer делал это, чтобы "угадать" кодировку страницы. Тем не менее, это очень подвержено ошибкам, поэтому немногие программы делают это.

В большинстве случаев программе необходимо явно указать кодировку текстового файла, иначе она не сможет правильно ее прочитать.

4

Обычные текстовые файлы не хранят никакой информации об их кодировке. Зритель определяет его на основе кодировки символов, которую вы для него установили. Он не может определить это сам по себе, так как это все равно для компьютера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .