您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理

Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理

在Linux上,文件名只是“一堆字节”,不一定以特定的编码进行编码。Python 3尝试将所有内容转换为Unicode字符串。通过这样做,开发人员想出了一种方案,可以将字节字符串转换为Unicode字符串,然后又将其转换回去而不会丢失,也不会知道原始编码。他们使用部分替代来编码“坏”字节,但是普通的UTF8编码器在打印到终端时无法处理它们。

例如,这是一个非UTF8字节的字符串:

>>> b'C\xc3N'.decode('utf8','surrogateescape')
'C\udcc3N'

它可以与Unicode相互转换而不会丢失

>>> b'C\xc3N'.decode('utf8','surrogateescape').encode('utf8','surrogateescape')
b'C\xc3N'

但是无法打印:

>>> print(b'C\xc3N'.decode('utf8','surrogateescape'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 1: surrogates not allowed

您必须弄清楚要使用非认编码的文件要做什么。也许只是将它们编码回原始字节,然后用未知替换将其解码。使用它进行显示,但保留原始名称以访问文件

>>> b'C\xc3N'.decode('utf8','replace')
C?N

os.walk 也可以采用字节字符串,并返回字节字符串而不是Unicode字符串:

for p,d,f in os.walk(b'.'):

然后,您可以根据需要进行解码。

python 2022/1/1 18:38:15 有243人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶