Чарде Беги не работает в Python 3
Я использую chardet 2.01 в python 3.2 code такой же код, как этот сайт http://getpython3.com/diveintopython3/case-study-porting-chardet-to-python-3.html
можете скачать здесь
http://jaist.dl.sourceforge.net/project/cygwin-ports/release-2/Python/python3-chardet/python3-chardet-2.0.1-2.tar.bz2
Я использую lxml2 для анализа HTML, чтобы получить строку
и используйте приведенный ниже код для определения кодировки
chardet.detect(name)
Но происходит ошибка
Traceback (most recent call last):
File "C:\python\test.py", line 125, in <module>
print(chardet.detect(str(name)))
File "E:\Python32\lib\site-packages\chardet\__init__.py", line 24, in detect
u.feed(aBuf)
File "E:\Python32\lib\site-packages\chardet\universaldetector.py", line 98, in feed
if self._highBitDetector.search(aBuf):
TypeError: can't use a bytes pattern on a string-like object
name
является строковым объектом
Конвертировать строку в байты означает кодировать ее с помощью кодировки типа 'utf-8','big5'
и так далее,charset будет определять кодировку, которую вы сделали.... не кодировку исходной строки
Понятия не имею с этой проблемой...
1 ответ
Проблема очевидна, вы звоните chardet
на строку, а не объект байтов. Что вам не хватает, так это то, что в Python строка уже декодирована. У него больше нет кодировки.
Вы должны исправить свой код так, чтобы он давал chardet
оригинальные байты, прежде чем они были декодированы в строку. Если вы получаете строку из другого пакета, он уже определил кодировку, и вы ничего не можете сделать.