繁体   English   中英

websocket发送汉字

[英]websocket send Chinese characters

我有一个由python编写的websocket服务器和一个由javaScript编写的websocket客户端。

当使用英文字符(例如“ haha​​ha”)时,它们可以相互发送消息并运行良好。

当使用“哈哈”等汉字时,服务器可以接收到该消息,并且我在python端对该消息进行解码,然后可以正常工作。 但是,当服务器将“哈哈”字符发送给客户端时,它表示与“ ws:// localhost:3369 /”的WebSocket连接失败:无法将文本框架解码为UTF-8。

我发送的数据是b'\\ x81 \\ x02 \\ xe5 \\ x93 \\ x88 \\ xe5 \\ x93 \\ x88'。 \\ x81总是这样。 \\ x02表示它具有两个字符且没有掩码。 \\ xe5 \\ x93 \\ x88 \\ xe5 \\ x93 \\ x88代表工资单('哈哈')。

谁能告诉我如何解决此问题,谢谢。

js代码:

var socket = new WebSocket('ws://localhost:3369');

socket.onopen = function(){
    console.log('socket open');
    $('#send').click(function(){
        var data = 'dsfg';
        socket.send(data);
        console.log('click');
    });
}

socket.onmessage = function(result){
    console.log("从服务端收到的数据:");
    console.log(result.data);
}

socket.onclose = function(evt){
    console.log('socket close');
}

socket.onerror = function(evt) { 
    console.log('error:')
};

python代码:

def send_data(self, data):
if data:
  data = str(data)
else:
  return False

token = b'\x81'

length = len(data)

if length < 126:
  token += struct.pack('B', length)
elif length <= 0xFFFF:
  token += struct.pack('!BH', 126, length)
else:
  token += struct.pack('!BQ', 127, length)

data = token + data.encode()

self.con.send(data)

return True

长度部分必须为以字节为单位的长度。 因此,使用6作为第二个字节的值,如下所示。

\\x81\\x06\\xe5\\x93\\x88\\xe5\\x93\\x88

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM