在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也确保你可以有这样的文件名。