Python 3操作系统遍历Unicode异常。

3

我正在win7中使用Python 3.3.3 - 我只想列出网络目录中的所有文件。

import os

for root, dirs, files in os.walk("X:\\network\\path\\foo\\bar\\baz"):
    print(root)
    print(dirs)
    print(files)

打印一段时间后,它会输出此异常。
Traceback (most recent call last):
  File "program.py", line 6, in <module>
    print(files)
  File "C:\Python33\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position
2753: character maps to <undefined>

如何简单地打印这个?我总是在Python 3中遇到Unicode问题。我只想让简单的事情保持简单。


你正在尝试将一个特定字符打印到无法打印该特定字符的控制台上。Python 应该怎么做? - Mark Ransom
不知道 - 在这个位置用 \u2019 转义?只是不想抛出错误吗?为什么在 Python 2 中可行(已经尝试并且有效)? - MKaras
1
它能够正常工作是因为Python 2不会自动将文件名转换为Unicode。 - Mark Ransom
1个回答

2

在Windows 7中,控制台不支持Unicode编码。您需要将字符串编码为cp-437:

print(root.encode("cp437", "backslashreplace").decode("cp437"))

这将删除所有DOS控制台中无法打印的字符,并用它们的\unnnn\xnn等效字符替换它们。


1
@MKaras: 如果你使用支持Unicode的编码打开文件(with open("output.txt", "w", encoding="utf-8") as output: output.write(root)),那就可以。 - Tim Pietzcker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接