/ / Python Encoding Error、unicode文字列ではありません - python、unicode、encoding、utf-8、beautifulsoup

Pythonエンコーディングエラー、unicode文字列ではありません - python、unicode、encoding、utf-8、beautifulsoup

他のエンコーディングの問題を抱えずに "u"を取り除く方法は?

u"Example Characters : xc3xa9 xc3xa0"

これが何を印刷するのか:

Example Characters : é Ã

の代わりに :

Example Characters : é à

BeautifulSoup要素に対してgetText()を使用すると、この問題が発生します。 (ウェブページはutf-8にあります)

回答:

回答№1は4

あなたが持っている モジバケ (入力の誤ったデコード)

あなたはおそらくUnicode文字列を BeautifulSoup(). これをやってはいけないデコードはBeautifulSoupにお任せください。

たとえば、あなたが requests、 つかいます response.content、ない response.text HTMLを渡す BeautifulSoup()。そうでなければ、結果がLatin-1としてデコードされる危険性があります。これは、ヘッダーに明示的な文字セットが含まれていないHTTP上のテキスト応答のデフォルトのエンコードです。あなたが使用した場合 urllib2, ドン "t 最初にデコードします。

BeatifulSoupはエンコードを検出してあなたのためにデコードします。 HTMLを使用する <meta> もしあればタグ。 utf-8は正しく自動検出されるはずです。あなたが前もってエンコーディングを知っていて、BeautifulSoupがそれを間違ったと思ったら、 from_encoding 正しいエンコーディングを指定するには

soup = BeautifulSoup(htmlsource, from_encoding="utf8")

を参照してください エンコーディング セクション BeautifulSoupドキュメントの

やっぱりあなたは まだ モジバケの結果を Webページ自体 誤ってエンコードされた値でデータを生成しました。その場合は、エラーを元に戻すことができます。

mojibake_string.encode("latin1").decode("utf8")

これは正しいエンコーディングで文字を再解釈します。

>>> u"Example Characters : xc3xa9 xc3xa0".encode("latin1").decode("utf8")
u"Example Characters : xe9 xe0"
>>> print _
Example Characters : é à

気にする必要はありません。 u 接頭辞これは単なる型指標であり、Unicode値があることを示しています。


回答№2の場合は0

明確に作成した文字列にUnicode文字が含まれています U + 00C3, U + 00A9、および U + 00A0。印刷された表現は、あなたが望まないと言う文字列です。

どうやらあなたはUTF-8文字列を埋め込もうとしています。それはバイト文字列(b"..." Unicode文字列ではない(Python 3.xでは)u"...")実際に欲しい文字列を取得するには、試してみてください。

"Example Characters : xc3xa9 xc3xa0".decode("utf-8")

実際の文字を含むUnicode文字列が生成されます。

も参照してください http://nedbatchelder.com/text/unipain.html