Мне было интересно, если некоторые текстовые файлы хранят свой метод кодирования вдоль их текстового содержимого для последующего декодирования?
Ответ Марка Шимански правильный: в явном текстовом файле нет явной информации о кодировке - это определение «простого текстового файла», под «обычным» понимается тот факт, что в файле нет метаданных.
Однако некоторые приложения размещают метку порядка байтов (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 делал это, чтобы «угадать» кодировку страницы. Тем не менее, это очень подвержено ошибкам, поэтому некоторые программы делают это.
В большинстве случаев программе необходимо явно указать кодировку текстового файла, иначе она не сможет правильно ее прочитать.