python - Unicode 文件名到 python subprocess.call()

标签 python unicode subprocess call

<分区>

我正在尝试使用 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())

这与上面的解决方案非常相似。

希望对您有所帮助。

关于python - Unicode 文件名到 python subprocess.call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595448/

相关文章:

python - h5py文件上传中,np.array(file[key][ :]) and np. array(file[key]) 有什么区别

MySQL unicode 文字

java - 使用 Unicode 作为 Java 变量?

python - 从 FFProbe STDERR 打印字符串时输出错误

python - 在 Python 中使用子进程

python - 无法从子进程解析 xml。Python 中的 Popen 输出

python - 使用漂亮的汤在 python 中检索 `h1 id`

python-docx 用 MySQL 数据生成文档

python请求: SSL error during requests?

java - 检查设备是否支持 Unicode?