gpt4 book ai didi

python - 为什么 str.encode ('utf-8' ) 在我的 python 脚本中产生 UnicodeDecodeError ?

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:00 25 4
gpt4 key购买 nike

运行以下代码时(仅打印出文件名):

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之类的文件名时失败。

有什么想法可以修改文件名,以便脚本在遇到特殊字符时继续工作吗?

注意。我是一个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 将编码为终端使用的编解码器。

关于python - 为什么 str.encode ('utf-8' ) 在我的 python 脚本中产生 UnicodeDecodeError ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28030404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com