Socket.io: データ文字列がソケットを介して変更されます

作成日 2017年11月30日  ·  5コメント  ·  ソース: socketio/socket.io

:サポートに関する質問については、 stackoverflowまたはslackのいずれかのチャネルを使用してください

あなたはしたい:

  • [x]バグを報告する
  • []機能をリクエストする

現在の動作

オブジェクトをデータとして出力し、その中で (またはユニコード\u2265 )の文字列を使用すると、オブジェクトは文字列eおよびに変わります。 d変わります

再現手順(現在の動作がバグの場合)

クライアント側

channel.emit('data', {data:'≥'});

サーバ側

socket.on('data',({data:bla})=>{
console.log(bla); // prints 'e'
});

:迅速な回答を得るための最良の方法は、失敗したテストケースを提供することです。たとえば、次のフィドルをフォークします。

期待される動作

データが一貫して同じままであること

設定

  • OS:Windows
  • ブラウザ:Chrome 62
  • socket.ioバージョン:1.7.2

その他の情報(例:スタックトレース、関連する問題、修正方法の提案)

最も参考になるコメント

2.0.4で試してみましたが、それでも発生します...
このコードでデータをエンコードおよびデコードすることで修正しました:
クライアント側

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

サーバ側

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

全てのコメント5件

これは、ソケットがxhrを介してアップグレードされていない(最初の使用)場合にのみ発生します。
WebSocketにアップグレードした後、すべてのデータが正しく送信されます

#451および#572を参照

バージョン1.xでのutf8解析に関する問題がありましたが、バージョン2.xで試してみてください。

関連している:

2.0.4で試してみましたが、それでも発生します...
このコードでデータをエンコードおよびデコードすることで修正しました:
クライアント側

function strencode( data ) {
    return encodeURIComponent( escape( JSON.stringify( data ) ) );
}

サーバ側

function strdecode( data ) {
    return JSON.parse( unescape( decodeURIComponent( data ) ) );
}

ええ、それは機能しているようです。 ありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価