簡體   English   中英

為什么str.encode('utf-8')在我的python腳本中產生UnicodeDecodeError?

[英]Why does str.encode('utf-8') produce UnicodeDecodeError in my python script?

運行以下代碼(僅打印出文件名)時:

print filename

它引發以下錯誤:

File "myscript.py", line 78, in __listfilenames
print filename
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 13: ordinal not in range(128)

因此,要解決此問題,我嘗試將print filename更改為print filename.encode('utf-8') ,但無法解決問題。

該腳本在嘗試讀取文件名(例如Coé.jpg

有什么想法可以修改filename以便腳本在遇到特殊字符時繼續工作?

NB。 我是python菜鳥

filename已被編碼。 它已經是字節字符串,不需要再次編碼。

但是由於您要求對其進行編碼,因此Python首先必須為您對其進行解碼 ,並且它只能使用默認的ASCII編碼進行編碼。 隱式解碼失敗:

>>> 'Coé.jpg'
'Co\xc3\xa9.jpg'
>>> 'Coé.jpg'.decode('utf8')
u'Co\xe9.jpg'
>>> 'Coé.jpg'.decode('utf8').encode('utf8')
'Co\xc3\xa9.jpg'
>>> 'Coé.jpg'.encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)

如果您想要編碼的字節串,則根本不需要進行任何編碼。 刪除.encode('utf8')

您可能需要閱讀Python和Unicode。 我建議:

經驗法則是:盡早解碼,盡早編碼。 這意味着,當您接收數據時,解碼為Unicode對象,當您需要將該信息傳遞給其他對象時,則僅進行編碼。 許多API可以將解碼和編碼作為其工作的一部分。 print將編碼為終端使用的編解碼器。

暫無
暫無

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

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