为什么在尝试以UTF-8编码字符串时出现此错误? 'ascii'编解码器无法解码位置20的字节0x85:序数不在范围内(128)

我不太喜欢Python,尝试将某些数据序列化为JSON对象时遇到以下问题。

注意:此代码来自我在Udemy上遵循的Python安全课程。

进入一类我有这种方法:

# Transform the data to be sent into JSON format and send data in this reliable format:
def reliable_send(self, data):
    print("reliable_send() START !!!")
    print("ORIGINAL DATA:\n")
    print(data)

    utf8_data = data.encode("utf-8", errors="ignore")
    print("---------------------------------------------------")
    print("UTF8 ENCODED DATA are:")
    print(utf8_data)
    json_data = json.dumps(utf8_data)
    print("---------------------------------------------------")
    print("JSON DATA TO BE RETURNED:\n")
    print(json_data)

    self.connection.send(json_data)

如您所见,它需要一个数据参数(字符串),然后将其转换为UTF-8格式并转换为utf8_data字符串,然后尝试使用json.dumps()函数对其进行序列化,但这里有一个例外。

我插入了一条print()语句进行调试,目的是首先将接收到的原始数据打印到数据参数中。这是我得到的:

23/04/2020  04:36    <DIR>          .
23/04/2020  04:36    <DIR>          ..
19/03/2019  06:00               896 eula.lnk
24/04/2020  09:11             3.458 reverse_backdoor.py
23/04/2020  03:57    <DIR>          test
               2 File          4.354 byte
               3 Directory  21.503.520.768 byte disponibili

要知道:此输出是在Windows 10计算机上执行dir命令的结果,然后必须以JSON格式序列化并在连接上返回。

问题是当我的程序尝试通过以下代码行以UTF8编码时:

utf8_data = data.encode("utf-8", errors="ignore")

我得到此异常:

Traceback (most recent call last):
  File "reverse_backdoor.py", line 95, in <module>
    my_backdoor.run()
  File "reverse_backdoor.py", line 90, in run
    self.reliable_send(command_result)
  File "reverse_backdoor.py", line 23, in reliable_send
    utf8_data = data.encode("utf-8", errors="ignore")
UnicodeDecodeError: 'ascii' codec can't decode byte 0x85 in position 20: ordinal not in range(128)

程序结束。我真的为这个错误而疯狂,我不明白为什么。

此UTF-8转换有什么问题?我想念什么?如何解决此问题?

评论