他のエンコーディングの問題を抱えずに "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