Чарде Беги не работает в 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 оригинальные байты, прежде чем они были декодированы в строку. Если вы получаете строку из другого пакета, он уже определил кодировку, и вы ничего не можете сделать.

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