2017-02-16 9 views
0

クライアントが情報を要求し、サーバーから応答を受け取るJavaサーバーを作った。私はクライアントに情報を送信するためにBufferedWriterを使用しています。情報はヘブライ語です。問題は、サーバーがヘブライ語を彼に送ると、クライアントはちょっとばかげているということです。私はすでにISO-8859-8、UTF-8、Unicodeなどの異なるエンコーディングを試みましたが、どれも役に立たなかった。私はチェックを行い、サーバー側では、サーバーの文字列は、ヘブライ語でうまく、私はそれもヘブライ語でファイルに保存し、それが働いた。私は本当に何をすべきかわからない。私はここでほとんどすべての解決策を試したが、何も働かなかった。ヘブライ語で価値を得ようとしているときに、クライアント側でぎこちなくなっていく

+2

エンコードの問題には注意が必要です。特に、クライアントとサーバーはエンコーディングに同意しなければならず、関連するすべての文字をエンコードできるものでなければなりません(私はUTF-8を推奨します)。それを超えて、私たちは[mcve]なしではほとんど言えません。 –

+1

ブラウザのデベロッパーツールを使用して、レスポンスのContent-Typeヘッダーと、実際にブラウザで選択された文字エンコーディングを確認します。彼らは何ですか?または、これはWebアプリケーションではなく、カスタムクライアント/サーバープロトコルですか?その場合、なぜあなたはサーバーを疑うのですか?クライアントでどのようにデコードを処理していますか? – erickson

+0

クライアントとは何ですか?ブラウザ?カスタムアプリですか? –

答えて

0

BufferedWriterを使用しないでください。ちょっと変わったところで、UTF-8エンコーディング(例:ラテン文字以外の文字)を書きたい場合は、DataOutputStream変数を使用するだけで済みますが、これは方法writeUTF()を有する。 これは次のようになります。

DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
    out.writeUTF(someString); 
    out.flush(); 
+0

受信側が長さ+データ形式のデータを受信することを期待し、[変更されたUTF-8変種*がJVMおよびJavaクラスファイルによって内部的に使用されている](https:// docs。 oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8)。おおよそ、クライアントが 'DataInputStream.readUTF()'でそれを読み取った場合に限ります。 Webブラウザなどの汎用クライアントでは正しくありません。 –

+0

@JohnBollingerそれは 'BufferedReader'で動作しましたが、とにかく私の場合はアンドロイドアプリでした。私はそれが他のユーザーには便利だと思います。 –

+1

これで作業するコードが少なくとも用意されましたので、汎用のUTF-8文字ストリームの場合、UTFを使用するように設定された 'OutputStreamWriter'にソケットの' OutputStream'をラップすることをお勧めします-8。 'OutputStreamWriter'と' OutputStreamReader'は文字ストリームとバイトストリームの間のJavaの標準ブリッジです。 –

関連する問題