VS Code Python环境stdout乱码问题:系统编码为chcp 850
解决VS Code Python环境subprocess输出乱码问题
问题根源
你的系统CMD/PowerShell使用chcp 850编码,ipconfig/getmac这类命令输出的是CP850编码的文本;但VS Code终端默认是UTF-8,Python的subprocess如果编码匹配错误,就会导致拉丁字符(í、á、ó等)显示成奇怪符号。另外你代码里的strip('UTF-8')是完全错误的用法——strip是用来移除字符串首尾指定字符的,和编码无关,只会乱删字符。
修复方案
直接在subprocess.run里指定编码为CP850,让Python正确捕获命令输出的文本,之后输出到VS Code的UTF-8终端就能正常显示了。
修改后的代码
import subprocess def ejecutar_comando(comando_Red): # 指定编码为CP850,匹配系统命令行的输出编码 resultado = subprocess.run(comando_Red, shell=True, capture_output=True, text=True, encoding='cp850') return resultado.stdout.strip() comando_Red = [ "ipconfig /all", "getmac" ] for comando in comando_Red : salida = ejecutar_comando(comando) print(salida)
另一种写法(不用text=True)
如果不想用text=True,可以手动解码字节流:
import subprocess def ejecutar_comando(comando_Red): resultado = subprocess.run(comando_Red, shell=True, capture_output=True) # 用CP850解码命令输出的字节数据 return resultado.stdout.decode('cp850').strip()
验证效果
修改后运行代码,输出里的í、á、ó等拉丁字符就能正常显示,和你在CMD/PowerShell里直接执行命令的效果一致。
内容的提问来源于stack exchange,提问作者alonso garcia garcia
相关产品推荐
相关产品推荐

