Python 3.4.3:将unicode字符串打印到控制台的安全方法?

时间:2015-07-08 17:06:18

标签: python windows python-3.x unicode console

在为文件管理编写一次性脚本时,我经常使用print函数来验证是否例如我正在操作的文件列表是我想要的。考虑例如

for path in glob.glob("*.mp3"):
    print(path)

在Windows上(包括使用LANG=C时的Cygwin,因此这也适用于Unix)如果文件名包含unicode字符,这将引发UnicodeEncodeError

在Cygwin中,当使用print(repr(path))时,不受支持的字符将转义为\uxxxx。但是,在Windows控制台中,它仍然会引发UnicodeEncodeError

部分解决方案

我发现最接近解决方案的是

unicodestring = "Hello \u2329\u3328\u3281\u1219 World"

print(repr(unicodestring).encode("utf8").decode(sys.stdout.encoding))
# Breaks even supported characters

print(unicodestring.encode("unicode-escape").decode("ascii"))

对于“快速和脏”脚本而言,这两者都相当冗长,特别是当打印调用包含多个具有可能的非ascii内容的字符串时。

Python 2存在类似的问题,但这些解决方案通常不适用于Python 3.此外,它们通常同样冗长。

0 个答案:

没有答案