gpt4 book ai didi

Python 3 : os. walk() 文件路径 UnicodeEncodeError: 'utf-8' codec can't encode: surrogates not allowed

转载 作者:太空狗 更新时间:2023-10-29 17:01:38 27 4
gpt4 key购买 nike

这段代码:

for root, dirs, files in os.walk('.'):
print(root)

给我这个错误:

UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 27: surrogates not allowed

如何遍历文件树而不得到像这样的有毒字符串?

最佳答案

在 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 3 : os. walk() 文件路径 UnicodeEncodeError: 'utf-8' codec can't encode: surrogates not allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366479/

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