簡體   English   中英

Python - unicode字符串中的ASCII編碼字符串; 如何刪除'你'?

[英]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.

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