2


私はPython3.2でchardet2.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は、作成したエンコードを検出します。元の文字列のエンコード
ではありません。これについてはわかりません。問題...

4

1 に答える 1

4

問題は明らかですchardet。バイトオブジェクトではなく文字列を呼び出しています。あなたが見逃しているのは、Pythonにとって、文字列はすでにデコードされているということです。もうエンコーディングはありません

chardet文字列にデコードされる前に元のバイトが返されるようにコードを修正する必要があります。別のパッケージから文字列を取得している場合、それはすでにエンコーディングを決定しており、あなたができることは何もありません。

于 2012-09-10T15:11:49.327 に答える