chardet在python 3中运行不正确

时间:2012-09-10 14:22:42

标签: python encoding python-3.x chardet


  我在python 3.2中使用chardet 2.01,像这个网站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 个答案:

答案 0 :(得分:4)

问题很明显,你在字符串而不是字节对象上调用chardet。您缺少的是Python,字符串已经解码。它不再拥有编码。

您必须修复代码,以便在将它们解码为字符串之前给它chardet原始字节。如果你从另一个包中获取字符串,那么它已经确定了编码,你无能为力。