python3+websocket解析遇到中文乱码

握手成功后前端向服务器发送报文信息,信息内容有中文。解析过程中如何解决乱码问题?
msg = decode1(self.conn.recv(1024)) #接收报文
#解析报文
def decode(data):
if not len(data):
return False
length = data[1] & 127
if length == 126:
mask = data[4:8]
raw = data[8:]
elif length == 127:
mask = data[10:14]
raw = data[14:]
else:
mask = data[2:6]
raw = data[6:]
ret = ''
for cnt, d in enumerate(raw):
ret += chr(d ^ mask[cnt % 4])
return ret

4个回答

 def parse_recv_data(msg):
    en_bytes = b''
    cn_bytes = []
    if len(msg) < 6:
        return ''
    v = msg[1] & 0x7f
    if v == 0x7e:
        p = 4
    elif v == 0x7f:
        p = 10
    else:
        p = 2
    mask = msg[p:p + 4]
    data = msg[p + 4:]
    for k, v in enumerate(data):
        nv = chr(v ^ mask[k % 4])
        nv_bytes = nv.encode()
        nv_len = len(nv_bytes)
        if nv_len == 1:
            en_bytes += nv_bytes
        else:
            en_bytes += b'%s'
            cn_bytes.append(ord(nv_bytes.decode()))
    if len(cn_bytes) > 2:
        # 字节数组转汉字
        cn_str = ''
        clen = len(cn_bytes)
        count = int(clen / 3)
        for x in range(0, count):
            i = x * 3
            b = bytes([cn_bytes[i], cn_bytes[i + 1], cn_bytes[i + 2]])
            cn_str += b.decode()
        new = en_bytes.replace(b'%s%s%s', b'%s')
        new = new.decode()
        res = (new % tuple(list(cn_str)))
    else:
        res = en_bytes.decode()

    return res

xc303919323
xc303919323 非常感谢,亲测可用
2 年多之前 回复
xc303919323
xc303919323 吊的一B
2 年多之前 回复

把中文发送的时候统一用utf8编码。然后解码的时候解码回来。

StandByNow
砂积山 我前端网页发送过来是utf-8的,具体怎么做呢?
大约 3 年之前 回复

解决了吗 浏览器websocket 发来的 带中文的解析乱码 英文正常

def parse_recv_data(msg):
en_bytes = b''
cn_bytes = []
if len(msg) < 6:
return ''
v = msg[1] & 0x7f
if v == 0x7e:
p = 4
elif v == 0x7f:
p = 10
else:
p = 2
mask = msg[p:p + 4]
data = msg[p + 4:]
for k, v in enumerate(data):
nv = chr(v ^ mask[k % 4])
nv_bytes = nv.encode()
nv_len = len(nv_bytes)
if nv_len == 1:
en_bytes += nv_bytes
else:
en_bytes += b'%s'
cn_bytes.append(ord(nv_bytes.decode()))
if len(cn_bytes) > 2:
# 字节数组转汉字
cn_str = ''
clen = len(cn_bytes)
count = int(clen / 3)
for x in range(0, count):
i = x * 3
b = bytes([cn_bytes[i], cn_bytes[i + 1], cn_bytes[i + 2]])
cn_str += b.decode()
new = en_bytes.replace(b'%s%s%s', b'%s')
new = new.decode()
res = (new % tuple(list(cn_str)))
else:
res = en_bytes.decode()

return res
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问