web-dev-qa-db-ja.com

utf-8文字列をコンテンツとしてUnicodeをstrに変換します

私は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'ではない

10
wong2

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'})

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

26
Martijn Pieters