我正在尝试使用 unicode 文件名运行 subprocess.call(),这里是简化的问题:
n = u'c:\\windows\\notepad.exe '
f = u'c:\\temp\\nèw.txt'
subprocess.call(n + f)
这引发了著名的错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8'
编码为 utf-8 会产生错误的文件名,而 mbcs 将文件名作为不带重音的 new.txt 传递
我无法再阅读有关这个令人困惑的主题的更多内容,只能原地打转。我在这里找到了过去许多不同问题的答案,所以我想加入并自己寻求帮助
谢谢
我找到了一个很好的解决方法,它有点困惑,但它确实有效。
subprocess.call 将以自己的编码将文本传递给终端,这可能是也可能不是它所期望的。因为你想让它便携,所以你需要知道机器在运行时的编码。
以下内容
notepad = 'C://Notepad.exe'
subprocess.call([notepad.encode(sys.getfilesystemencoding())])
尝试找出当前编码,因此将正确的编码应用于 subprocess.call
作为旁注,我还发现如果你试图用当前目录组成一个字符串,使用
os.cwd()
Python(或操作系统,不知道)会弄乱带有重音字符的目录。为了防止这种情况,我发现以下方法有效:
os.cwd().decode(sys.getfilesystemencoding())
这与上面的解决方案非常相似。
希望对您有所帮助。