此标准输出在 UTF-8 中不起作用,因为我的 Visual Studio Code 和我的计算机 (
chcp 850
)
Estado de los medios. . . . . . . . . . . : medios desconectados Sufijo DNS espec¡fico para la conexi¢n. . : Descripci¢n . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter Direcci¢n f¡sica. . . . . . . . . . . . . : E0-C2-64-64-FA-92 DHCP habilitado . . . . . . . . . . . . . : s¡ Configuraci¢n autom tica habilitada . . . : s¡
代码:
import subprocess
def ejecutar_comando(comando_Red):
resultado = subprocess.run(comando_Red, shell=True, capture_output=True, text=True)
return resultado.stdout.strip('UTF-8')
comando_Red = [
"ipconfig /all",
"getmac"
]
for comando_Red in comando_Red :
salida = ejecutar_comando(comando_Red)
print (salida)
我期待 UTF-8 输出,其中包含 í、á、ó、ú... 等内容。 我的 cmd 和 powershell 在
chcp 850
中工作并显示正确的拉丁字符。
你对字符编码的理解显然是不完整的。如果控制台配置为代码页 850,那么这就是您应该告诉 Python 的内容,并从输出中得到期望。
假设子进程以这种编码方式产生输出,
def ejecutar_comando(comando_Red):
resultado = subprocess.run(
comando_Red, capture_output=True, text=True, encoding='cp850')
return resultado.stdout
关键的补充是
encoding='cp850'
,它告诉 Python 如何解码子进程的输出。
.strip('UTF-8')
会删除字符串两侧出现的任何 U、T、F、- 或 8,但这显然不正确或无用。
顺便说一句,我不认为
shell=True
在这里是必要或有用的,所以我也删除了它。
这仍然需要配置您的 Python 以正确编码当前代码页的输出。有关详细信息,请参阅 Python、Unicode 和 Windows 控制台。
更有可能的是,您的控制台实际上是 cp1252。
>>> "código".encode("cp850").decode("cp1252")
'c¢digo'
如果您需要帮助识别编码,我谦虚地为您提供https://tripleee.github.io/8bit/;也许还可以参见 Stack Overflow
character-encoding
标签信息页面