vsc (python) 中已经有 UTF-8,但标准输出会产生奇怪的字符

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

此标准输出在 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
中工作并显示正确的拉丁字符。

python visual-studio-code cmd utf-8 output
1个回答
0
投票

你对字符编码的理解显然是不完整的。如果控制台配置为代码页 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
标签信息页面

© www.soinside.com 2019 - 2024. All rights reserved.