[英]Python Encoding Error, not unicode string
如何擺脫“ u”而沒有其他編碼問題?
u"Example Characters : \xc3\xa9 \xc3\xa0"
這里顯示的內容:
Example Characters : é Ã
代替 :
Example Characters : é à
在BeautifulSoup元素上使用getText()時遇到此問題。 (該網頁使用的是UTF-8)
您有一個Mojibake (錯誤的輸入解碼)。
您很可能將Unicode字符串傳遞給BeautifulSoup()
。 不要這樣做 ,將解碼留給BeautifulSoup。
例如,如果您使用requests
,請使用response.content
而不是response.text
將HTML傳遞給BeautifulSoup()
。 否則,您將冒着將結果解碼為Latin-1的風險,這是HTTP上文本響應的默認編碼,而在標頭中沒有明確的字符集。 如果您使用urllib2
, 請不要先解碼。
BeatifulSoup會為您檢測編碼和解碼; 如果存在,它將使用HTML <meta>
標簽。 應該正確自動檢測UTF-8。 如果您from_encoding
知道編碼,並且BeautifulSoup還是將其弄錯了,請使用from_encoding
指定正確的編碼:
soup = BeautifulSoup(htmlsource, from_encoding='utf8')
請參閱BeautifulSoup文檔的“ 編碼”部分 。
如果畢竟您仍能獲得Mojibake結果,則該網頁本身已生成具有錯誤編碼值的數據。 在這種情況下,您可以使用以下方法來消除錯誤:
mojibake_string.encode('latin1').decode('utf8')
這將以正確的編碼重新解釋字符:
>>> u"Example Characters : \xc3\xa9 \xc3\xa0".encode('latin1').decode('utf8')
u'Example Characters : \xe9 \xe0'
>>> print _
Example Characters : é à
無需擔心u
前綴; 那只是一個類型指示器,以顯示您具有Unicode值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.