• ベストアンサー

チャットシステムの文字化け

お世話になります。 書籍などを参考にして、マイクロソフトWindows環境でチャットサーバと クライアントを作ってみました。サーバクラス群をリナックス(Fedora)に 乗せて起動させ、Windowsマシンからアクセスしてみると、一応チャットは できることはできたのですが、日本語がすべて文字化けしました。 サーバのソースの中に記述してある「さんが入室しました。」も、 クライアント側では「縺輔s縺悟・螳、縺励∪縺励◆」と表示されますし、 クライアント側から「こんにちは」と入力してもサーバからは 「ヘには。」になって返ってきます。 ところがウインドウズマシンにサーバクラス群を乗せて、チャット してみると、文字化けが起こらないわけです。 文字コードの関係でそのような事態が起こるのだと想像するわけですが、 どのようなコーディングをすればこれを防げるのでしょうか。 どなたか心当たりのある方、よろしくご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

以下は、別の掲示板に書いたものの一部です。文字列I/OにDataInput/OutputStreamのwrite/readUTF()を使うか、またはWriter/Reader族を使って具体的に使用文字コードを指定するか、のどちらかの方法を採ってください。 <quote> チャットというと文字列のI/Oになりますが、それにはDataInput/OutputStreamクラスは適していません(サーバもクライアントも自分で書くときにはwrite/readUTF()を確実に使えるので、逆に信頼性がありますが)。 入力には: new BufferedReader(new InputStreamReader(ソケットの入力ストリーム)); 出力には: new BufferedWriter(new OutputStreamWriter(ソケットの出力ストリーム)); これを使って、さらに必要なら、Input/OutputStreamReaderのコンストラクタに出力側(送信側)が使う文字コードを正しく指定してください。 </quote>

noname#132124
質問者

お礼

ご回答誠にありがとうございます。今から実装してみます。本当にありがとうございました。

その他の回答 (1)

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.2

2台のコンピュータをサーバとクライアントに見立ててソケット通信しているのですよね。 ソケットから得たストリームを次のようにWriter/Readerにして文字列をやり取りすれば、コンピュータのOSによらずUTF-8で統一されるので化けないと思います。 データ送信側 文字列をUTF-8エンコードでバイナリ送信 Writer writer = new OutputStreamWriter(outoutStream, "UTF-8"); PrintWriter pw = new PrintWriter(writer); pw.println("こんにちは"); データ受信側 UTF-8でバイナリをデコード Reader reader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader br = new BufferedReader(reader); String input = br.readLine(); System.out.println(input); ※"UTF-8"でスペルあってます?ちょっと自信ないので確認してください。

noname#132124
質問者

お礼

お礼が遅くなりもうしわけありません。非常に参考になりました。多謝であります。ありがとうございました。

関連するQ&A