Обнаружение кодирования в Python, используйте библиотеку шрифтов или нет?

Я пишу приложение, которое принимает огромное количество текстов в качестве входных данных, которые могут быть в любой кодировке символов, и я хочу сохранить все это в UTF-8. Я не получаю или не могу доверять кодировке символов, которая определяется данными (если есть).

Я некоторое время использовал шрифт библиотеки Pythons для обнаружения исходной кодировки символов http://pypi.python.org/pypi/chardet, но в последнее время столкнулся с некоторыми проблемами, когда я заметил, что это не так, t поддерживает скандинавские кодировки (например, iso-8859-1). И кроме того, для получения результатов требуется огромное количество времени /CPU/mem. ~ 40 секунд для текстового файла размером 2 МБ.

Я попробовал просто использовать стандартный файл Linux

file -bi name.txt

И со всеми моими файлами до сих пор он дает мне 100% результат. И это с ~ 0,1 с для файла размером 2 МБ. И он также поддерживает кодировки скандинавских символов.

Итак, я думаю, что преимущества использования файла ясны. Каковы недостатки? Я что-то пропустил?

Ответ 1

Старый MS-DOS и файлы в формате Windows могут быть обнаружены как unknown-8bit, а не ISO-8859-X, из-за не полностью стандартных заявок. Вместо этого Chardet выполнит обоснованное предположение, сообщив о достоверности.

http://www.faqs.org/faqs/internationalization/iso-8859-1-charset/

Если вы не будете обрабатывать старые, экзотические, нестандартные текстовые файлы, я думаю, вы можете использовать file -i без особых проблем.

Ответ 2

Я нашел "обожаемый" (http://code.google.com/p/chared/), чтобы быть довольно точным. Вы можете даже обучать новые детекторы кодирования для языков, которые не поддерживаются.

Это может быть хорошей альтернативой, когда чарт начинает действовать.