BUG:os.listdir(),打印文件名失败。
测试文件名:“地方.txt”
报错字符串:“\udce5\udc9c\udcb0\udce6\udc96\udcb9.txt”
把原文件名解码后,得到:
>>> a = '地方.txt'
>>> a.encode('utf-8')
b'\xe5\x9c\xb0\xe6\x96\xb9.txt'
可以看到,解码和报错字符串是完全一样的。
把报错字符串解码,会报错:
>>> b = '\udce5\udc9c\udcb0\udce6\udc96\udcb9.txt'
>>> b.encode('utf-8')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
b.encode('utf-8')
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 0-5: surrogates not allowed
解决方法为,忽略错误:
>>> b.encode('utf-8', errors='surrogateescape')
b'\xe5\x9c\xb0\xe6\x96\xb9.txt'
这时,只要再转码就可以了。
>>> b = '\udce5\udc9c\udcb0\udce6\udc96\udcb9.txt'
>>> b.encode('utf-8', errors='surrogateescape').decode('utf-8')
'地方.txt'