10

私はページを解析するためにpyqueryを使用しています:

dom = PyQuery('http://zh.wikipedia.org/w/index.php', {'title': 'CSS', 'printable': 'yes', 'variant': 'zh-cn'})
content = dom('#mw-content-text > p').eq(0).text()

しかし、私が取得するのcontentは、utf-8でエンコードされたコンテンツを含むUnicode文字列です。

u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8...'

strコンテンツを失うことなく、どうすれば変換できますか?

明確にするために:

が欲しいですconent == '\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'

いいえconent == u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'

4

1 に答える 1

27

UTF-8 バイトの値がある場合はunicode、「バイト」を保持するために Latin-1 にエンコードします。

content = content.encode('latin1')

Unicode コードポイントは U+0000 から U+00FF までをすべて latin-1 エンコーディングで 1 対 1 でマップするためです。したがって、このエンコーディングはデータをリテラル バイトとして解釈します。

あなたの例では、これは私に与えます:

>>> content = u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
>>> content.encode('latin1')
'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
>>> content.encode('latin1').decode('utf8')
u'\u5c42\u53e0\u6837\u5f0f\u8868'
>>> print content.encode('latin1').decode('utf8')
层叠样式表

PyQueryrequestsまたはurllibを使用して HTML を取得し、 の場合は応答requestsの属性を使用します。.textこれは、ヘッダーのみに設定されたエンコードに基づいて応答データを自動デコードしContent-Typeます。その情報が利用できない場合は、これを使用latin-1します (テキスト応答の場合、ただし HTML はテキスト応答です)。encoding引数を渡すことでこれをオーバーライドできます。

dom = PyQuery('http://zh.wikipedia.org/w/index.php', encoding='utf8',
              {'title': 'CSS', 'printable': 'yes', 'variant': 'zh-cn'})

その時点で、再エンコードする必要はまったくありません。

于 2013-01-26T18:18:30.247 に答える