2016-10-19 9 views
0

WebSocket経由でバイナリデータをPythonアプリケーションに送信しています。このバイナリデータは、struct.unpack("BH", data")を呼び出してデコードされ、4バイトのバイトオブジェクトが必要です。
私が現在直面している問題は、arraybufferモードであってもすべてのデータに重複するバックスラッシュが含まれていることです。そのため16バイトの長さです。私はさまざまなサイズを検出することができません、そのデータの後ろに追加されたデータ(この質問とは無関係)があっても、私もPythonでバックスラッシュを取り除く方法を見つけることができませんでした。WebSocketメッセージのJavaScriptの二重バックスラッシュ

データが送信される方法:

// this.webSocket.binaryType = "arraybuffer"; 
var message = "\\x05\\x00\\x00\\x00"; // escaping required 
var buffer = new Int8Array(message.length); 
for (var i = 0; i < message.length; i++) { 
    buffer[i] = message.charCodeAt(i); 
} 
this.webSocket.send(buffer.buffer); 

比較すると、これはPythonで定義されたときにデータが見えた方法です。

b'\x05\x00\x00\x00' 

そして、これは、それが受信したメッセージとしてどのように見えるかです:

b'\\x05\\x00\\x00\\x00' 

この問題の理想的な解決方法はJavaScript-sですPythonベースのクライアントを壊さずにPythonアプリケーションの実装を実際に変更することはできないからです。

答えて

1

あなたは文字列としてバイトではなく、メッセージを定義する必要があります。

var buffer = new Int8Array([5,0,0,0]) 
this.webSocket.send(buffer.buffer) 
+0

は ' "\\ X05"'と '5'同等ですか? – guest271314

+0

いいえ、 "\\ x05"は4バイトですが、5はバイト\ x05と同じです。 – Daniel

+0

どの形式が '\\ x05" 'ですか? – guest271314

関連する問題