2016-04-20 29 views
0

我有一個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代碼:

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 

回答

0

長度部分必須是長度字節。因此,使用6作爲第二個字節的值,如下所示。

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

+0

謝謝你,這個工作適合我。這個問題需要我一個下午,但現在看起來很簡單!不不不。 – SunPointed