- PR -

日本語の文字が化けます。

1
投稿者投稿内容
wawoo
会議室デビュー日: 2003/12/02
投稿数: 3
投稿日時: 2003-12-02 11:19
はじめまして、金と申します。

日本語の文字化けでこのサイトから始め、色々なサイトを探しても解決できなかったので、
皆さんの助言を求めてここに書きます。

Linux上のサーバでEUCコードの日本語をWinodwsのAppletに直接送っています。
WindowsのI.E.ではMicrosoft VM(Java JITコンパイラの使用をチェック)
を使っています。
(SunのVMは使えません。)

Appletで文字を表示するテストを行ってみました。

1.ta.append(" None " + (new String(str.getBytes())));
この場合は文字が化けます。EUCコードの文字をShift_JISで読んだのと同じくみえます。

2.ta.append(" Shift_JIS " + (new String(str.getBytes(), "Shift_JIS")));
この場合は1番と同じ結果になります。

3.ta.append(" Direct EUC " + (new String("日本語テスト")));
直接、EUCコードの日本語を送って見ましたが、この場合は文字が化けないです。

4.ta.append(" Auto " + (new String(str.getBytes(), "JISAutoDetect")));
5.ta.append(" EUC-JP " + (new String(str.getBytes(), "EUC-JP")));
4番と5番は
Could not load class: sun.io.ByteToCharJISAutoDetect
Could not load class: sun.io.ByteToCharEUC-JPのようなエラーが出ます。

サーバから直接送るEUCコードの文字をWindowsで文字化けなく表示したいです。

ちなみにSunのVMを使ってテストしてみると上の4番と5番で
化けない文字と化ける文字がありました。

皆さんの助言をお願いします。


おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-02 12:26
引用:

Linux上のサーバでEUCコードの日本語をWinodwsのAppletに直接送っています。


Linux上のサーバ、というのはWebサーバでしょうか?
まあ、それは置いといても、文字データの流れは大雑把に言って以下のようになるでしょう。

------------------------------------------------------------------
(1)サーバ | (2)ネットワーク | (3)Applet | (4)表示
  Linux  |         |  Windows |   Windows
------------------------------------------------------------------
  EUC-JP |  EUC-JP(?)  |  UNICODE |   CP932(MS932)
------------------------------------------------------------------

どのようなプラットフォームで稼動しようが、Java内部では文字をUNICODEで扱っています。
そのため、文字化けという現象が起きるのは、JavaへのInputかJavaからのOutputが起きる
時だけです。で、今回は上記(2)→(3)と(3)→(4)が怪しいわけです。

ところで、コード変換が行われる時は明示的に指定しなければ基本的にプラットフォームの
デフォルトが使われますので、(2)→(3)ではWindowsデフォルトのCP932→UNICODE、(3)→(4)
でもWindowsデフォルトのUNICODE→CP932の変換が行われるはずです。ところが、(2)→(3)では
上図から明らかなように本来はEUC-JP→UNICODEの変換を行わなければいけないわけで、
そこの変換が疑われるわけです。

回りくどくなりましたが、サーバからAppletにネットワークを介してEUC-JPの文字列を読み込む
部分(恐らくソケット周り)で、上記のように文字コードの変換を行っているかどうかをチェック
してみて下さい。


[ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-02 12:30 ]
wawoo
会議室デビュー日: 2003/12/02
投稿数: 3
投稿日時: 2003-12-02 18:10
早い返事ありがとうございます。

実環境をもっと詳しく説明すると次のようです。
メールのログをリアルタイムでウェブ上でみせる
プログラムを作成しています。

管理者はI.E.でTomcatサーバ(JSP)に接続してウェブ上でログを見ます。
ログの画面は上部(普通のJSPページ:EUC-JPの日本語が文字化けなく見えます。)と下部(Applet:ログファイルをそのまま見せる部分で文字化けします。)で構成されています。

サーバ側の負荷(メールサーバなので他の処理で負荷がかかります。)を考えて
サーバ側ではあるデーモンが(Cで作成)文字変換をせずにログファイルをAppletに
送っています。
それで、Appletで文字の変換を試したんです。
MSのVMを使うと文字が化けるか
Could not load class: sun.io.ByteToCharEUC-JPのようなエラーがでました。
SUNのVMを使うと化ける文字もありましたが化けない文字が多かったので
他の方法があるのではないか思ってここに質問したわけです。

お話したようにAppletに送る前、EUC-JPをUNICODEに変換して
テストをやってみます。
親切な説明ありがとうございます。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-12-02 18:54
unibon です。こんにちわ。

http://java-house.jp/ml/topics/
から辿れる
http://java-house.jp/ml/archive/j-h-b/028128.html#body
を見ると Microsoft Java では EUC がサポートされていないようです。

ファイルを見てみると、
Sun の Java だと lib/charsets.jar の中に
sun.io.ByteToCharEUC_JP クラスがあるのですが、
Microsoft Java だとこれに相当するものがないような感じです。
あまり細かなこと(変換の正確性等)を問わないのならば、
自前で EUC-JP をいったん Shift_JIS あたりに変換してから
その後で標準の Shift_JIS のコンバータを使えば良いと思います。
#でも変なやりかたですね。やりたくないですよね。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-02 19:37
引用:

http://java-house.jp/ml/archive/j-h-b/028128.html#body
を見ると Microsoft Java では EUC がサポートされていないようです。


おお、既に何年も前にそんな話題があったんですね!
それにしても、サポートしないなんて、、、
さすがMSと言うか。

こうなると、Microsoft VMしか使えないという制約がはずせない場合、自前でクラスを用意するしかないですかね、、、それか、アプレットのJARにこっそり足りないクラスを仕込んでおくとか
1

スキルアップ/キャリアアップ(JOB@IT)