• ベストアンサー

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

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

noname#132124
noname#132124
  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • _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

  • 文字化け

    私は、友達とよくチャットをしています。 でも、ある日、チャットが文字化けしてしまいました。 そのおかげで文字を読む事すらも何も出来ません これじゃぁなにもできないので文字化け解除法を教えてください!!!! 私のチャットは秘密チャット入室です 私はこれでも機械オンチなので何をするのか?? それをするためにどこを開くのか?? をしっかり教えてくださるとありがたいです ぜひぜひ、よろしくお願いします

  • PHPの文字化け

    PHPでチャットを作っているのですが、どうしても、文字化けを起こしてしまいます。 文字化けを起こす場所は、入室するときの名前と、ログを読み出すときです。 それ以外は正常に動作しているように見えます。 文字化けする文字は、日本語だけで、アルファベットは問題ありません。 「テスト」と入力するとFirefoxでは「???鴻??」といった用になって、IEでは「・・"鴻ヨ」というように文字化けの仕方が違うようです。 文字コードはEUCです。 サーバーはwindowsでローカルサーバーを立てています。 サーバーの設定の問題でしょうか? アドバイスをよろしくお願いします。

    • ベストアンサー
    • PHP
  • sambaの共有名が文字化け

    Linuxのsambaサーバにwindowsクライアントからアクセスすると共有フォルダ名が文字化けする場合があります。クライアントのOSにより発生する場合としない場合とがあります。 ・Windows95,98:文字化けしない ・WindowsNT,2000:文字化けする サーバは、TurboLinuxServer6.0で、samba2.0.7-ja-2.2を使用しています。 smb.confはSJISで記述し(ているつもり)、coding system=SJIS,client code page=932としています。 samba2.0.5の時は問題なかったのですが... そもそも、サーバ側の設定の問題なのか、クライアント側の設定の問題なのかさえわかりません。 解決方法をご存じの方がいらっしゃいましたら、よろしくお願いします。

  • RedHat9/Apache1.3でCGIが文字化け

    サーバマシンにウェブサイトで公開されているCGIプログラムをDLし、cgi-binディレクトリに置いて動かそうとしたのですが、文字化けします。 ネットワーク環境は、1台のルーターの下にサーバマシン1台(OS:RedHat9,Webサーバ:Apache1.3.33, IP:192.168.1.10)、クライアントマシン数台(OS:Windows 2000, IP:192.168.1.*)となっています。 まず、Kent Webさんのサイトhttp://www.kent-web.com/から掲示板「プチ☆ボード」をサーバマシンにDLし、httpd.confのScriptAliasで設定したcgi-binディレクトリに設置したところ、動作はするものの文字化けしてしまいます。 サーバマシンのMozillaから書き込んでみると、サーバマシンからでもクライアントマシンのIEからでも日本語は文字化けします。クライアントマシンから書き込んでみると、サーバマシンでもクライアントマシンでもその書き込みだけは文字化けしません。 同じくKent WebさんにあるDiary Note(気まぐれ日記)というCGIをDLし設置してみると、文字化けでタグが壊れているのか、トップページは表示されるもののリンク先へ飛びません。別ファイルから読み込むメッセージの部分だけは日本語で正しく表示されますが、他の部分はすべて日本語は文字化けしています。 テキストエディタでdiary.cgiファイルを開いてみると、日本語部分は文字化けしています。 そこで、一度クライアントマシンにプログラムをウェブサイトからDLし、FFFTPでASCIIモード、EUCコードに設定してdiary.cgiファイルをサーバマシンへアップロードしてみました。すると、テキストエディタで開くと日本語部分が正しく表示されるものの、cgi-binディレクトリにそのファイルを置いてブラウザからアクセスしてみると、やはり文字化けして動作しません。 どうすれば表示・動作が正しくなるのでしょうか?

  • 文字化け

    こんにちわ。今アメリカにすんでいてこちらでPCを買おうと思ってます。でもこっちのPCにはアメリカ版ウィンドウズが入ってます。つまり日本のCDなどいれるとインストール時の文字やインターネットのチャットルームなどは文字化けします。もし、こっちのPCに日本語版ウィンドウズをインストールしたとなればそれら等の文字化けはなくなるのでしょうか?もちろん最初に日本語版ウィンドウズをインストールするときは文字化けした画面がでてきますがインストール後はちゃんと日本語は文字化けしないででてくるのでしょうか?教えてください。

  • MySQLの文字化け

    Xampp(Ver 1.6.5)、phpMyAdmin2.11.3、PHP5.25、MySQL(ver5.0.51) まだ初めたばかりなのですが、MySQLでデータベースを作って日本語の文字入力をすると文字化けしてしまいます。コマンドプロンプトでクライアント側はSJISにセットしたのですが、サーバー側の文字セットがまだlatinになったままです。サーバー側の切り替え方を教えていただけませんか。宜しくお願いします。

    • ベストアンサー
    • MySQL
  • Apacheでの文字化けについて(LAN内)

    このたび、「FedoraCore4」を利用して自宅サーバ開設に挑んでいます。 いちおう全ての設定(公開に利用する)を終わり、さっそくテストでindex.htmlを書いてアップしてみました。 はじめに文字化けが発生していましたので、 > conf/httpd.conf 内の、 AddDefaultCharset UTF-8 の部分を改善し、サーバ機から閲覧した場合の文字化けは直りました。 しかし、クライアント側から閲覧したら文字化けになってしまっています。 もしかしてインターネット側からも文字化けに・・・ と思い、携帯電話からアクセスしてみたら大丈夫でした。 このように、LAN内からのクライアント機から見た場合の文字化けに対しては どのように対処したらよいのでしょうか? ご存知の方がおりましたら、ぜひご指導をお願いします。

  • FTP 文字化け

    FTPを使って、自宅サーバーから友人にファイルを配りたいと思っているのですが 日本語ファイル名が文字化けしていたり、表示自体されません。 FTPサーバーはProFTPd、クライアントはブラウザからダウンロードしようと考えています。 サーバーのOSはvine linux5.4です。 DLする側の文字コードなどを変更しないで文字化けさせない方法はありませんか?? Linux自体のシステムの文字コードを変えればいいのでしょうか? それともファイル名を半角に変更するしかないのでしょうか?? 回答お願いします・・

  • チャット文字化け。シフトJISとサーバーと相性?

    いつもお世話になっています。 ステップサーバーでPHPのPbScriptチャットをミニリスト(URLをメンバー名で表示できる名簿スクリプト)をリンクして設置したいのですが、 よく文字化けを起こします。 ある方がおっしゃるには、サーバーと文字コードには相性があると言われたのですが、何を使っていいのかよくわかりません。 普通のHTML等は文字化けをしないのですが・・・。 どなたかシフトJISが文字化けしないサーバーをご存知ではないでしょうか。 また、シフトJISを文字化けしないコードに変更する方法があればご教授ください。 どうぞ、よろしくお願いします。

    • 締切済み
    • CGI
  • HTMLの文字化けについて

    HTMLの文字化けについて クライアントPC(WindowsVista)で作成したHTMLファイルをサーバ(CentOS5.4)にアップして、ブラウザから確認してみたところ、文字化けを起こしてしまいました。 ローマ字は問題ないのですが、日本語が文字化けしてしまっており、表示がめちゃくちゃになってしまっています。 HTMLはK2Editorにて作成して、文字コードはShift-JIS、改行コードはCRLFとしております。 しかし、文字化けした状態でブラウザの文字エンコーディングをEUC-JPに変えて再度読み込んでみたところ、文字化けせずに表示されます。 サーバ側の文字コードは、 # vi /etc/sysconfig/i18n LANG="ja_JP.EUC-JP" と設定し、デフォルトのUTF-8からEUC-JPに変えております。 なので、もしかしたらサーバ側の文字コードとHTMLの文字コードが何か関係しているのかと私は思うのですが・・・ 文字化けの原因がお分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

    • ベストアンサー
    • HTML