Как я могу видеть, какое кодирование используется в файле

У меня были некоторые проблемы с файлами подзаголовка в видео omxplayer. Для решения его, я должен был преобразовать из окон 1250 к кодировке UTF-8. Мой вопрос, как я могу видеть некоторый определенный файл, какое кодирование используется?

23
задан 26 January 2017 в 23:34

2 ответа

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

, Что можно легко сделать, хотя должен проверить, может ли полный файл успешно декодироваться так или иначе (но не обязательно правильно) использование определенного кодека. При нахождении каких-либо байтов, которые не допустимы для данного кодирования, это должно быть что-то еще.

проблема состоит в том, что много кодеков подобны и имеют те же "допустимые шаблоны байта", просто интерпретировав их как различные символы. Например, ä в одном кодировании мог бы соответствовать é в другом или ø в одной трети. Компьютер не может действительно обнаружить, какой способ интерпретировать байт приводит к правильно читаемому пользователем тексту (если, возможно, если Вы добавляете словарь для всех видов языков и позволяете, он работать проверяет правописание...). Необходимо также знать, что некоторые наборы символов являются на самом деле подмножествами других, как, например, кодирование ASCII является частью обычно используемых кодеков как часть семейства ANSI или UTF-8. Это означает, например, текст, сохраненный как UTF-8, который только содержит простые латинские символы, это было бы идентично тому же файлу, сохраненному как ASCII.

<час>

Однако позволяют нам возвратить от объяснения, что Вы не можете сделать, к какому на самом деле можно сделать:

Для основной проверки на ASCII / неASCII (обычно UTF-8) текстовые файлы, можно использовать эти file команда. Это не знает много кодеков, хотя и это только исследует несколько первых КБ файла, предполагая, что остальные не будут содержать новых символов. С другой стороны, это также распознает другие типы общего файла как различные сценарии, HTML/XML-документы и много форматов двоичных данных (который является все неинтересным для сравнения текстовых файлов, хотя) и это могло бы распечатать дополнительную информацию, существуют ли чрезвычайно длинные линии или какой последовательность новой строки (например, UNIX: LF, Windows: CR+LF), используется.

$ cat ascii.txt 
I am an ASCII file.
Just text and numb3rs and simple punctuation...

$ cat utf8.txt 
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!

$ file ascii.txt utf8.txt 
ascii.txt: ASCII text
utf8.txt:  UTF-8 Unicode text

, Если это недостаточно, я могу предложить Вам сценарий Python, который я записал для этот ответ здесь , который сканирует полные файлы и пытается декодировать их использующий указанный набор символов. Если это успешно выполняется, то кодирование является потенциальным кандидатом. Иначе, если существуют какие-либо байты, которые не могут декодироваться с ним, можно удалить тот набор символов из списка.

26
ответ дан 23 November 2019 в 01:26

Программа, названная file, может сделать это. Пример:

$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators

, Если Вы интересуетесь тем, как это сделано, см. src/encoding.c.

12
ответ дан 23 November 2019 в 01:26

Другие вопросы по тегам:

Похожие вопросы: