【问题标题】:Python subprocess check_output decoding specials charactersPython子进程check_output编码特殊字符
【发布时间】:2018-03-10 15:24:21
【问题描述】:

我在使用 python 编码时遇到了一些问题。当我尝试执行此操作时:

subprocess.check_output("ipconfig", shell=True)

它给了我一个带有特殊字符的输出,例如:

"Statut du m\x82dia"
"M\x82dia d\x82connect\x82"

(我是法国人)

当我尝试在最后使用.decode() 对其进行解码时,它给了我这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 78: invalid start byte

我尝试使用.decode("utf-8"),我玩了几个小时的编码和解码,但我找不到答案。我在互联网上查看的所有内容均无效。也许我只是愚蠢,但是嘿。 我能做些什么来摆脱这些解码错误并打印我的特殊字符?

谢谢。

【问题讨论】:

  • 您可以通过在参数中添加 encoding="437"encoding="850" 来修复它,但我不会对这个答案感到满意,因为它没有解释为什么代码页是这样的。
  • @JoshLee 哦,伙计,.decode(sys.stdout.encoding) 就像一个魅力!谢啦!您能否将您的答案设为“官方”答案或其他内容,以便我进行验证?再次感谢,你让我很开心,我已经坚持了很长时间了^^"
  • 乔什·李说的。 FWIW,b"M\x82dia d\x82connect\x82".decode('cp437') 返回'Média déconnecté';使用 'cp850' 解码会得到相同的结果。
  • @PM2Ring 感谢您的回复,我会记住这些编码名称^^

标签: python python-3.x character-encoding subprocess special-characters


【解决方案1】:

您正在通过 CMD 调用命令,该命令具有 Unicode 模式和 ANSI 模式。 “正确”的方法是调用 Unicode 模式,但您可以在子进程调用中添加encoding="437"encoding="850" 使其工作。这取决于您知道当前代码页是什么。

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2019-05-30
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多