给定变位字符时,python os.popen失败

在winxp(pro x64版本2003,sp2)下,在cmd提示符下运行以下命令可以正常工作:

dir C:\testüüüdirectory\

请注意“ü”字符.

但是从python 2.7.1.4开始,以下代码始终返回错误代码1:

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

我怎样才能接受ü字符?

最佳答案
这可能是编码问题,其中您的输入与文件系统期望的输出不完全匹配.首先,您需要告诉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;第二个是带有合并偏音的“ u”,而第一个是预合并的.如果Windows期望一个,而encode()会产生另一个,则可能需要花点时间才能获得正确的字符串.

转载注明原文:给定变位字符时,python os.popen失败 - 代码日志