簡體   English   中英

Python對UTF-8字符的編碼是否錯誤?

[英]Python gets the wrong encoding for UTF-8 characters?

我正在嘗試從網站獲取帶有特殊字符的文本,因此Python返回的字符串充滿了“ \\ x”字符。 但是,似乎編碼是錯誤的。 例如,在獲取時:

th =urllib2.urlopen('http://norse.ulver.com/dct/zoega/th.html')

網頁<h1>級別的行應包含字母“Þ”,根據http://www.fileformat.info/info/charset/UTF-8/list.htm ,其字節數為C39E和Unicode代碼DE

相反,我得到

'<h1>\xc3\x9e</h1>'

字節數一分為二,以便將行寫入文件然后以Unicode編碼打開時,得到的是“Þ”而不是“Þ”。

如何強制Python將\쎞\\xde等字符編碼為\\xc3\\x9e

這是U + 00DE的正確UTF-8 字節編碼,需要兩個字節來表示( \\xc3\\x9e ),但是您需要將其解碼為Unicode才能看到Unicode代碼點:

>>> '<h1>\xc3\x9e</h1>'.decode('utf8')
u'<h1>\xde</h1>'

上面是一個Unicode字符串,顯示了正確的Unicode代碼點。 在UTF-8控制台上進行打印:

>>> print '<h1>\xc3\x9e</h1>'.decode('utf8')
<h1>Þ</h1>

如果您使用錯誤的編碼來解碼,則會得到不同的Unicode代碼點。 在這種情況下,U + 00C3和U + 017E。 \\xc3是Unicode字符串<U + 0100的Unicode字符串中的轉義代碼 ,而是<U + 10000的代碼點的一個:

>>> '<h1>\xc3\x9e</h1>'.decode('cp1252')
u'<h1>\xc3\u017e</h1>'
>>> print '<h1>\xc3\x9e</h1>'.decode('cp1252')
<h1>Þ</h1>

推薦閱讀:

暫無
暫無

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

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