给出umlauted字符时,python os.popen失败

时间:2011-10-06 18:16:50

标签: python windows popen

在winxp(pro x64 version 2003,sp2)下,在cmd提示符下运行以下代码可以正常工作:

dir C:\testüüüdirectory\

请注意'ü'字符。

但是从python 2.7.1.4开始,以下内容总是会返回错误代码1:

>>> res = os.popen("dir C:\\testüüüdirectory\\")
>>> res.close()
1
>>>

我怎样才能让popen接受ü角色?

2 个答案:

答案 0 :(得分:3)

这可能是一个编码问题,您的输入与文件系统在输出上的预期不完全匹配。首先,您需要告诉Python您的输入使用的编码,然后是popen()调用所期望的编码。

>>> filename = "C:\\testüüüdirectory\\".decode("utf-8")
>>> res = os.popen("dir " + filename.encode("cp1252"))

您可能需要尝试各种编码组合才能获得正确的配对。 UTF-8,UTF-16和cp1252最适合Windows,但您的系统可能设置为使用another encoding。如果你真的很幸运,os.popen()甚至可以接受Unicode字符串,在这种情况下可以跳过encode()步骤。

如果你真的不走运,character canonicalization可能是一个问题。 Unicode中有两种可能的“ü”表示:U + 00FC或U + 0075 U + 0308;第二个是结合了diaresis的“u”,而第一个是预先组合的。如果Windows期望encode()生成另一个,则可能需要稍微工作才能获得正确的字符串。

答案 1 :(得分:0)

尝试在字符串前面加u

 res = os.popen(u"dir C:\\testüüüdirectory\\")

More on unicode strings / lexical analysis

同时检查sys.getfilesystemencoding以确保您可以拥有此类文件名。