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

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

Некоторое время я использовал библиотечную кодировку Pythons для обнаружения оригинальной кодировки символов, http://pypi.python.org/pypi/chardet, но в последнее время столкнулся с некоторыми проблемами, когда заметил, что он не поддерживает скандинавские кодировки (например, изо-8859-1). Кроме того, для получения результатов требуется огромное количество времени / ресурсов процессора / памяти. ~40 с для текстового файла 2 МБ.

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

file -bi name.txt

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

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

2 ответа

Решение

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

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

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

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

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

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