我有一个类似的问题How to get the output of subprocess.check_output() python module?但是那里的解决方案不适用于德语Windows。
我在 wsl2 / ubuntu 的 python 3.10 中执行以下脚本:
import subprocess
import sys
ipconfig = subprocess.check_output(["ipconfig.exe", "/all"]).decode(sys.stdout.encoding)
这导致
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x84 in position 90: invalid start byte
从
check_output
返回的字节是:
b'\r\nWindows-IP-Konfiguration\r\n\r\n Hostname . . . . . . . . . . . . : XXXXXXXXXXXX\r\n Prim\x84res DNS-Suffix .
和
sys.stdout.encoding
是utf-8
。但这是错误的,因为 \x84
在 utf-8 下无效。
这里的
\x84
是一个ä
。根据 https://tripleee.github.io/8bit/#84 这对应于例如cp850
用于西欧编码,这是有道理的。
如何以编程方式获得正确的编码?