簡體   English   中英

Python編碼錯誤,而非Unicode字符串

[英]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值。

您創建的字符串明確包含Unicode字符U + 00C3U + 00A9U + 00A0 它們的打印表示形式是您說不想使用的字符串。

顯然,您正在嘗試嵌入UTF-8字符串。 這是一個字節字符串(在Python 3.x中為b'...' ),而不是Unicode字符串( u'...' )。 要獲取您實際想要的字符串,請嘗試

"Example Characters : \xc3\xa9 \xc3\xa0".decode('utf-8')

產生包含所需實際字符的Unicode字符串。

另請參見http://nedbatchelder.com/text/unipain.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM