[英]Python - ASCII encoding string in the unicode string; how to remove that 'u'?
當我在中文中使用python模塊'pygoogle'時,我得到的網址如你u'http://zh.wikipedia.org/zh/\\xe6\\xb1\\x89\\xe8\\xaf\\xad'
這是unicode但包括ascii。 我嘗試將其編碼回utf-8,但代碼也要改變。
a = u'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
a.encode('utf-8')
>>> 'http://zh.wikipedia.org/zh/\xc3\xa6\xc2\xb1\xc2\x89\xc3\xa8\xc2\xaf\xc2\xad'
我也嘗試使用:
str(a)
但是我得到了錯誤:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-32: ordinal not in range(128)
如何對其進行編碼以刪除“你”?
順便說一句,如果沒有'你',我會得到正確的結果,如:
s = 'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
print s
>>> http://zh.wikipedia.org/zh/漢語
你有一個Mojibake ; 在這種情況下,那些UTF-8字節被解碼,就好像它們是Latin-1字節一樣。
要反轉該過程,請再次編碼為Latin-1:
>>> a = u'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
>>> a.encode('latin-1')
'http://zh.wikipedia.org/zh/\xe6\xb1\x89\xe8\xaf\xad'
>>> print a.encode('latin-1')
http://zh.wikipedia.org/zh/漢語
print
工作正常,因為我的終端配置為處理UTF-8。 您可以通過解碼為UTF-8再次獲取unicode
對象:
>>> a.encode('latin-1').decode('utf8')
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'
ISO-8859-1(Latin-1)編解碼器將一對一映射到前255個Unicode碼點,這就是字符串內容看起來不變的原因。
您可能希望將ftfy
庫用於這些工作; 它處理各種各樣的文本問題,包括Windows代碼頁Mojibake,其中一些產生的“代碼點”不能合法地編碼到代碼頁。 ftfy.fix_text()
函數接受Unicode輸入並修復它:
>>> import ftfy
>>> ftfy.fix_text(a)
u'http://zh.wikipedia.org/zh/\u6c49\u8bed'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.