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
謝謝你,這個工作適合我。這個問題需要我一個下午,但現在看起來很簡單!不不不。 – SunPointed