python - os.popen().read() - charmap 解码错误

标签 python windows python-3.x cmd python-os

我已经读过UnicodeDecodeError: 'charmap' codec can't decode byte X in position Y: character maps to <undefined> .虽然错误信息相似,但代码完全不同,因为我在这道题中使用的是os.popen,而不是open。我无法使用其他问题的答案来解决这个问题。

output = os.popen("dir").read()

本应将命令“dir”的输出分配给变量“output”的这一行导致了此错误:

'charmap' codec can't decode byte 0x88 in position 260: character maps to <undefined>

我认为这可能会发生,因为文件夹中的某些文件的名称中包含 ł、ą、ęć 等字母。不过我不知道如何解决这个问题。

最佳答案

os.popen 只是 subprocess.Popenio.TextIOWrapper 对象的包装器:

The returned file object reads or writes text strings rather than bytes.

如果 Python 的默认编码不适合你,你应该直接使用 subprocess.Popen

潜在的问题是 cmd 默认写入 ansi 垃圾,即使输出到管道也是如此。此行为可能取决于您的 Windows 版本。

您可以通过将 /U 标志传递给 cmd 来解决此问题:

p = subprocess.Popen('cmd /u /c dir', stdout=subprocess.PIPE)
result = p.communicate()
text = result[0].decode('u16')

关于python - os.popen().read() - charmap 解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033334/

相关文章:

python - 如何从 JSON 字典设置 python 变量

c - Windows Defender/安全性删除我的 “hello world”程序

javascript - 如何使用SeleniumWebdriver和Python通过滚动找到网页上的所有元素

windows - 通过插入符和符号回显在批处理文件中换行。 (^&回声。)

python - 如何找到值按行和列排序的最大子矩阵?

python - Flask返回404错误的随机模板

python - 如何在不保存到磁盘的情况下从 python 中的 numpy 数组创建 png 图像文件对象(对于 http 请求)

python - 在 Linux 下模板文件更改时重新加载 Flask 应用程序

python - “cd”命令不适用于 fabric3

c - 如何在 Windows 中设置 Turbo C 路径?