2

少し問題があります。Jetty WebSocketの実装に基づいて、Javaで小さなサーバーを構築しています。クライアントはブラウザであり、私はwebsocketsjavascriptapiを使用して情報を送信します。

次のような特殊文字を送信するまで、すべてがうまく機能します:ăȚîșêñüだから、ここに問題があります。クライアント1は、この文字の1つを使用してサーバーにメッセージを送信します。サーバーはメッセージを印刷してから、クライアント2にメッセージを送信します。

クライアント2はメッセージを受信し、ブラウザのhtmlページにメッセージを印刷して、うまく機能します。文字が正しく表示されます。

問題は、サーバーサイトで文字列を印刷したいときです。ăの代わりに私にchar。データベースにテキストを挿入したいので、これは問題を引き起こしています(mysql- ut8エンコーディングが有効になっています)

だから..何が問題なのか。ブラウザから送信されるテキストはUT8エンコードされていませんか?または、jettyWebSocketの実装がutf8エンコーディングで文字列を受信して​​いませんか?

ありがとう

4

2 に答える 2

1

最初にこれを読んでくださいhttp://kunststube.net/encoding/

次に、バイトを文字列に(またはその逆に)変換したすべての場所を確認します。間違いを犯す一般的な場所には、エンコーディングを指定せずにを呼び出すことが含まgetBytes()れます。Stringその他の落とし穴には、データベース接続文字列にエンコーディングを設定しないことが含まれます。

于 2012-06-16T13:22:24.427 に答える
1

これは、文字列内のすべての特殊文字を HTML エンコードするために使用する関数です (ただし、html 自体 (<または など>) ではありません)。文字列をサーバーに送信する前に適用すると、全員が同じ文字列を表示し、データベース テーブルに格納できます。

function toHtmlEncoded(string){
    return string.replace(/[\u0080-\uC350]/g, 
                      function(a) {return '&#'+a.charCodeAt(0)+';';}
           );
}
于 2012-06-16T13:11:05.390 に答える