此代码:
for root, dirs, files in os.walk('.'):
print(root)
给我这个错误:
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 27: surrogates not allowed
如何在文件树中穿行而不产生这样的有毒字符串?
尝试使用这行代码:
"bad string".encode('utf-8', 'replace').decode()
我最终传递了一个字节串到os.walk()
,它显然会返回字节串,而不是不正确的Unicode字符串
for root, dirs, files in os.walk(b'.'):
print(root)
在Linux上,文件名“只是一堆字节”,不一定以特定的编码方式进行编码。Python3尝试将所有内容转换为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'.'):
然后你可以随心所欲地解码。
问题内容: 这段代码: 给我这个错误: 如何遍历文件树而不会得到像这样的有害字符串? 问题答案: 在Linux上,文件名只是“一堆字节”,不一定以特定的编码进行编码。Python 3尝试将所有内容转换为Unicode字符串。通过这样做,开发人员想出了一种方案,可以将字节字符串转换为Unicode字符串,然后又将其转换回去而不会丢失,也不会知道原始编码。他们使用部分替代来编码“坏”字节,但是普通的U
请查看Servlet类中的注释。如果将更改为,则无法访问应用程序。 为什么会出现这个问题?
问题内容: 当上传具有非ASCII字符的文件时,出现UnicodeEncodeError: 我使用MySQL,nginx和FastCGI运行Django 1.2。 根据Django Trac数据库,这是已解决的问题,但是我仍然有问题。欢迎提供有关如何修复的任何建议。 编辑:这是我的图像字段: 问题答案: 在对此进行更多调查之后,我发现我尚未在我的主要Nginx配置文件中设置字符集: 通过添加以上内
我在将文本从UTF-8编码转换为UTF-8编码时遇到问题。这里有字节数组, 我正在将其转换为UTF-8字符串并返回字节数组, 据我所知,这是一个3字节的数组。正当但这是我得到的。 这是什么原因?据我所知,在UTF-8 Specials中,2391189组合被称为替换字符。 这也是一个更大问题的一部分。
问题内容: 我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,但也没有用。 我知道返回正确的字符,但不起作用! 有人有主意吗? 问题答案: Paul的建议似乎是最好的做法,但如果要解决此问题,则根本不需要URLEncoder或URLDecoder: 更新: 由于获得了很多选票,我想强调BalusC的观点,即这绝对不是解决方案。充其量是一种解决方法。人们不应该这样做。 我不知道是
问题内容: 我正在用python做一些脚本。我创建一个保存在文件中的字符串。这个字符串有很多数据,来自目录的树状结构和文件名。根据convmv的介绍,我所有的树状结构都是UTF-8。 我想将所有内容都保留在UTF-8中,因为之后我将其保存在MySQL中。现在,在UTF-8的MySQL中,我遇到了一些字符问题(例如é或è-我是法语)。 我希望python始终将字符串用作UTF-8。我在互联网上阅读了