如何解决以下错误问题:UnicodeDecodeError:'utf-8'?

时间:2018-12-08 04:53:56

标签: python-3.x utf-8

程序应输出在用户控制台中执行的结果,并通过邮件将结果发送给我。控制台上的命令可以正常工作,但“ ipconfig”除外。

正常工作的代码:

import subprocess, time, os, smtplib, re
from subprocess import check_output

serverIP = "iperf.net.ru"
def startShell(serverIP):
    """Start windows command line, measuring Internet channel"""
    print("Measuring external channel, please wait...")
    try:
        information = check_output("iperf3 -c %s -i 11" % serverIP, shell = True).decode()
        return information
    except:
        print("There was an error connecting to the server!")

发生错误的代码:

def netSettings():
    """Show network settings"""
    try:
        netSet = check_output("ipconfig", shell = True).decode()
        return netSet
    except:
        print("An error occurred while displaying the settings!")

错误类型:

>>> netSet = check_output("ipconfig", shell = True).decode()
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    netSet = check_output("ipconfig", shell = True).decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8d in position 2: invalid start byte

不带解码功能()的输出

>>> netSet = check_output("ipconfig", shell = True)
>>> print(netSet)
b'\r\n\x8d\xa0\xe1\xe2\xe0\xae\xa9\xaa\xa0 \xaf\xe0\xae\xe2\xae\xaa\xae\xab\xa0 IP 

真的很期待您的建议!诚实地在询问之前搜索了论坛!

3 个答案:

答案 0 :(得分:0)

似乎check_output的返回未使用utf-8编码。这是您可以尝试放入decode中的标准编码的列表:https://docs.python.org/3/library/codecs.html

答案 1 :(得分:0)

用于捕获输出的外壳使用cp866的俄语OEM编码,因此您可能使用的是俄语本地化版本的Windows:

b = b'\r\n\x8d\xa0\xe1\xe2\xe0\xae\xa9\xaa\xa0 \xaf\xe0\xae\xe2\xae\xaa\xae\xab\xa0 IP'
print(b.decode('cp866'))

输出:

Настройка протокола IP

您可以在chcp之前解析ipconfig的输出以获取代码页。

答案 2 :(得分:-1)

netSet = check_output("ipconfig", shell = True).decode(encoding="866")

马克·托洛宁(Mark Tolonen)帮助我解决了这个问题!