从 python 获取使用 subprocess.check_output 调用的 Windows 可执行文件的代码页/编码

问题描述 投票:0回答:0

我有一个类似的问题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
用于西欧编码,这是有道理的。

如何以编程方式获得正确的编码?

python windows character-encoding subprocess
© www.soinside.com 2019 - 2024. All rights reserved.