解码来自tcp客户端的字节

时间:2019-10-23 09:13:37

标签: python-3.x tcp

我从tcp客户端获取字节为:

b'\xaa\x01\x00v\x07\x80]\xaf\xf4\x99\x00\x06\x1a\x80\x00\x00Cg\xb0H\xbf<\xe4XBHt\xbf\xbe\xff\xdc\x00AO{\xb3B\x9b/\x91A \x00\x00\x00\x00\x00\x00<\xe7\xd5g\x00\x00\x00\x00<\xa9\x93\x0c\x00\x00\x00\x00<\x11\xd1N\x00\x00\x00\x00;\xe2\x19e\x00\x00\x00\x00;>\r\xed\x00\x00\x00\x00:\xf9\tl\x00\x00\x00\x00;\x93t\xbc=\x190\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xaf'
b'\xaa\x01\x00v\x07\x80]\xaf\xf4\x99\x00\x07\xa1 \x00\x00Cg\x9f \xbf*\xa3\xa0BHuy?5\xa4\x00AO{\xb3B\x9b/\x91A \x00\x00\x00\x00\x00\x00<\xe7\xd5g\x00\x00\x00\x00<\xa9\x93\x0c\x00\x00\x00\x00<\x11\xd1N\x00\x00\x00\x00;\xe2\x19e\x00\x00\x00\x00;>\r\xed\x00\x00\x00\x00:\xf9\tl\x00\x00\x00\x00;\x93t\xbc=\x190\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\r'

当我使用以下方法解码时:

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1460)
            if not data:
                break
            print(data)
        print(data.decode())

它显示错误为:

UnicodeDecodeError:'utf-8'编解码器无法解码位置0处的字节0xaa:无效的起始字节

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

查看转义序列,它看起来像十六进制数据。 您可以转换删除转义序列,如下所示

import binascii
c = binascii.hexlify(data)

然后由您自己决定如何解释数据。

例如,您可以将十六进制字符串转换为int数组。

[int(c[i:i+2],16) for i in range(0,len(c),2)]

推荐How to convert hex str into int array