unicode字符串的decode
方法根本沒有任何應用程序(除非你有一些非t由於某種原因,在一個unicode字符串中擴展數據 - 參見下文)。我想這主要是出於歷史原因。在Python 3中,它完全消失了。
unicode().decode()
將使用默認(ascii)編解碼器執行隱含的編碼的s
。驗證是這樣的:
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
錯誤消息是完全一樣的。
對於str().encode()
它周圍的其他方法 - 它企圖的s
一個隱含解碼默認編碼:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
像這樣來使用,str().encode()
也是多餘的。
但是則存在是非常有用的後一種方法的另一種應用:有encodings具有無關的字符集,因此可以以有意義的方式被施加到8位字符串:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
你說的對:這兩個應用程序的「編碼」的模糊用法是...... awkard。再次,在Python 3中使用單獨的byte
和string
類型,這不再是問題。
來源
2009-01-16 02:06:33
hop
我認爲[本頁]的第二個答案(http://stackoverflow.com/questions/10288016/usage-of-unicode-and-encode-functions-in-python)足夠清晰和簡潔。 – Ben 2016-12-01 11:24:22