簡體   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