- Мне было интересно, если некоторые текстовые файлы хранят свой метод кодирования вдоль их текстового содержимого для последующего декодирования?
- Или текстовый просмотрщик должен угадать метод кодирования для данного текстового файла, и угадывание не всегда может быть правильным? Если да, то как программа для просмотра текста догадывается об этом?
19
Ответы:
Ответ Марка Шимански правильный: в явном текстовом файле нет явной информации о кодировке - это определение «простого текстового файла», под «обычным» понимается тот факт, что в файле нет метаданных.
Однако некоторые приложения размещают метку порядка байтов (BOM) в текстовых файлах, закодированных как UTF-16 или UTF-32 / UCS-4. На самом деле спецификация не предназначена для указания кодировки (она указывает порядок байтов, как следует из названия), но многие приложения будут использовать наличие спецификации для распознавания UTF-16 / UTF-32, поэтому она служит индикатором кодирования.
Да, просмотрщик текста может только догадываться. Обычно используется некоторая эвристика:
vim
работает по умолчанию: сначала он попытается использовать UTF-8 при чтении файла; если это не удается, он возвращается к ISO-8859-1.В большинстве случаев программе необходимо явно указать кодировку текстового файла, иначе она не сможет правильно ее прочитать.
источник
file -bi
работает, если спецификация не используется?file
имеет различные эвристики для определения типа файла и кодировки. В основном он ищет определенные строки или байтовые последовательности в файле. Если вам нужна более конкретная информация, вам, вероятно, придется прочитать источник. Или просто задайте отдельный вопрос :-).file
не может надежно определить большинство текстовых кодировок (потому что это очень сложно). Страница man содержит некоторую информацию об обнаружении набора символов - вfile
основном распознает только ASCII, UTF-8/16, EBCDIC и ISO-8859-x. Например, файл, закодированный в KOI8-R, обозначается как «ISO-8859-1».Обычные текстовые файлы не хранят никакой информации об их кодировке. Зритель определяет его на основе кодировки символов, которую вы для него установили. Он не может определить это сам по себе, так как это все равно для компьютера.
источник
less
иgrep
на Unix / Linux это сделать).