websocket发送汉字

时间:2016-04-20 08:59:50

标签: javascript python websocket

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

当使用像'hahaha'这样的英文字符时,他们可以互相发送消息并且运作良好。

当使用像'哈哈'这样的汉字时,服务器可以收到消息,我在python端解码消息然后运行良好。但是当服务器向客户端发送'哈哈'字符时,它说与'ws:// localhost:3369 /'的WebSocket连接失败:无法将文本框架解码为UTF-8。

我发送的数据是b'\ x81 \ x02 \ xe5 \ x93 \ x88 \ xe5 \ x93 \ x88'。 \ x81总是如此。 \ x02表示它有两个字符,没有掩码。 \ xe5 \ x93 \ x88 \ xe5 \ x93 \ x88代表paylod('哈哈')。

任何人都可以告诉我如何解决这个问题,谢谢。

js code:

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

1 个答案:

答案 0 :(得分:0)

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

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