Обнаружение кодировки в 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/) довольно точным. Вы даже можете обучить новые детекторы кодирования для языков, которые не поддерживаются.
Это может быть хорошей альтернативой, когда Чарде начинает капризничать.