Лучший способ анализа файлов ANSI и UTF-16LE с использованием Python 2/3?
Вопрос
У меня есть коллекция файлов в кодировке ANSI или UTF-16LE.Я бы хотел, чтобы Python открывал файлы, используя правильную кодировку.Проблема в том, что файлы ANSI не вызывают никаких исключений при кодировании с использованием UTF-16le и наоборот.
Есть ли простой способ открыть файлы, используя правильную кодировку?
Решение
Используйте библиотеку chardet для определения кодировки.
Другие советы
Вы можете проверить наличие спецификация в начале файла, чтобы проверить, является ли он UTF.
Затем unicode.decode соответственно (используя один из стандартные кодировки).
РЕДАКТИРОВАТЬИли, может быть, попробуйте s.decode('ascii') вашу строку (учитывая, что s — это имя переменной).Если он выдает UnicodeDecodeError, декодируйте его как «utf_16_le».
Что в файлах? Если это обычный текст на основе латинского алфавита, почти каждый второй байт файлов UTF-16LE будет равен нулю. С другой стороны, в файлах windows-1252 я не ожидал бы увидеть нули вообще. Например, вот & # 8220; Hello & # 8221;
в windows-1252:
93 48 65 6C 6C 6F 94
... и в UTF-16LE:
1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20
Помимо фигурных кавычек, каждый символ отображается на одно и то же значение с добавлением завершающего нулевого байта. Фактически, это верно для каждого символа в наборе символов ISO-8859-1 (windows-1252 расширяет ISO-8859-1, добавляя сопоставления для нескольких печатаемых символов & # 8212; например, фигурные кавычки & # 8212; заменять управляющие символы в диапазон 0x80..0x9F
).
Если вы знаете, что все файлы являются либо windows-1252, либо UTF-16LE, быстрое сканирование на нули должно быть всем, что вам нужно, чтобы выяснить, какой именно. Есть веская причина, почему Chardet такой медленный и сложный, но в этом случае я думаю, что вы можете сойти с рук быстро и грязно. Р>