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最可能的候选对象,但是您的系统可能被设置为使用其他编码 。 如果你真的很幸运, os.popen()甚至可能接受一个Unicode字符串,在这种情况下,可以跳过encode()步骤。

如果你真的不走运, 字符标准化可能是一个问题。 在Unicode中有两种可能的“ü”表示:U + 00FC或U + 0075 U + 0308; 第二个是“u”,一个是合并拨号,而第一个是预先合并的。 如果Windows需要一个,而encode()产生另一个,你可能需要工作一点,以获得正确的字符串。

在字符串前用u来试试它:

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

更多关于unicode字符串/词法分析

检查sys.getfilesystemencoding也确保你可以有这样的文件名。