【发布时间】:2021-05-31 12:55:11
【问题描述】:
我目前正在做一个项目,我需要在 powershell 中运行命令,并且部分输出不是英语(特别是希伯来语)。
例如(问题的简化版),如果我想获取我桌面的内容,并且有希伯来语的文件名:
import subprocess
command = "powershell.exe ls ~/Desktop"
print (subprocess.run(command.split(), stdout=subprocess.PIPE).stdout.decode())
此代码将引发以下错误(或具有不同字节值的类似错误):
UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 19: invalid start byte
尝试在另一台计算机上运行它,这是输出:
?????
知道为什么会这样,我该如何解决?尝试了很多我在其他问题上看到的东西,但没有一个对我有用。
【问题讨论】:
-
尝试使用
decode()和encoding参数,例如decode(encoding="latin1") -
输出字符编码取决于您的 system/os/shell 设置。如果您收到 UnicodeDecodeError,则表示捕获的输出是 NOT unicode。您也许可以使用
locale.getpreferredencoding()获取编码并将其用作decode()的参数,正如@Marino 上面指出的那样。 -
@Marino Latin-1 不支持希伯来语。解码会成功(因为任何字节序列都可以用Latin-1解码),但结果可能是垃圾。
-
感谢您的 cmets。不幸的是 - 它们都不起作用:(我认为python中的命令输出实际上是字符
?,不太清楚为什么。 -
您能否提供一些您遇到问题的示例文件名?
标签: python powershell utf-8 decode