- - PR -
Javaのプラットフォーム互換(文字エンコード)
1|2|3
次のページへ»
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2001-11-02 14:01
日本語Win2000上でコンパイルしたJavaプログラムを英語DebianLinuxにSCP(FTP)で送って動かすとコンソール上の日本語表示が文字化けしてしまいます。ところが、Linux上でコンパイルしてから動かすと文字化けしなくちゃんときれいに表示されるんです。
英語Linuxだと標準文字コードは英語だからString = "";だとプラットフォームのエンコードを使われるのかなと思い、Stringを生成するときに、
コンパイル後のClassファイルはどこでもつかるんじゃないのか!なんて一人突っ込んだのですが、どなたか理由を知ってる方いませんか?プラットフォーム上でコンパイルすればいいだけの話なんであまり緊急じゃないんですが、なんででしょうねぇ。 [ メッセージ編集済み 編集者: H2 編集日時 2001-11-02 23:10 ] | ||||||||||||||||
|
投稿日時: 2001-11-02 14:31
> 日本語Win2000上でコンパイルしたJavaプログラムを
> 英語Vine LinuxにSCP(FTP)で送って動かすと > コンソール上の日本語表示が文字化けしてしまいます。 > ところが、Linux上でコンパイルしてから動かすと > 文字化けしなくちゃんときれいに表示されるんです。 JDKに関しては、Windows/Linuxともに、国際化対応版を使ってるんですよね??? > String message = new String(new byte[0], Shift_JIS); > と指定したのですがやっぱり直りません。 String message = new String(new byte[0], "Shift_JIS"); の写し間違い??? > コンパイル後のClassファイルはどこでもつかるんじゃないのか! 基本的に、Sun JDKでコンパイルした中間バイナリ(クラスファイル)は、 Windows / Unix に関係なく、再コンパイルせずにそのまま実行できますよ。 | ||||||||||||||||
|
投稿日時: 2001-11-02 18:15
ソースファイルを EUC で書かれていて、Win2000上でコンパイルする時に、-encodingを指定してないんじゃないでしょうか?
| ||||||||||||||||
|
投稿日時: 2001-11-02 22:35
もちろんです。私のWin2000はJSDK1.3.1で、大学のVine Linuxは1.3.0です。マイナーな違いですが互換問題は基本的にないはずです。
すみません、ご指摘どうりです。写し間違えました。
そうですよね。そのままの中間バイナリで実行はするんですが、日本語表示だけが文字化けしてしまうんです。
私もそう思ったので試しました。ソースはSJIS、EUC両方でやってみたのですが×でした。 うーん、なんでだろう。気になります。 | ||||||||||||||||
|
投稿日時: 2001-11-02 22:41
もちろんです。私のWin2000はJSDK1.3.1で、大学のVine Linuxは1.3.0です。マイナーな違いですが互換問題は基本的にないはずです。(よね?)
すみません、ご指摘どうりです。写し間違えました。
そうですよね。それがJavaの特徴といか良いところじゃないですか。"Written once, runs everywher"のはずなのに・・・。そのままの中間バイナリで実行はするんですが、日本語表示だけが文字化けしてしまうんです。でも、Linuxでコンパイルしてから実行すると何も問題なく動くんです。
私もそう思ったので試しました。ソースはSJIS、EUC両方でやってみたのですが×でした。 うーん、なんでだろう。ぜんぜん、問題ではないのですが気になります。 | ||||||||||||||||
|
投稿日時: 2001-11-02 22:53
逆はどうですか?
| ||||||||||||||||
|
投稿日時: 2001-11-02 23:10
自分なりの実験です。
私のPCは「日本語Win2000+J2SDK1.3.1」 大学側は「英語Debian Linux 2.4.7-Server + J2SDK1.3.0」 両側で付属のHotSpot対応のjavaとjavacを使用。(jikesなどの他コンパイラではない) ファイル転送はCygwinのscpを使用。 サンプルプログラム(やっぱりHelloWorldでしょ):
コンパイル: "javac -encoding Shift_JIS HelloWorld.java" 実行:"java HelloWorld" 実験@ Win2000側でコンパイルし、scpでlinux側に転送の後、HelloWorld.classをLinux上で実行 結果@ 「こんにちはみなさん!」は表示されず「??????????」が表示される。 実験A Linux側でコンパイルし、HelloWorld.classをLinux上で実行 結果A 「こんにちはみなさん!」が表示される。 実験B Linux側でコンパイルし、scpでWin2000側に転送の後、HelloWorld.classをWin2000上で実行 結果B 「?±?????????????????I」が表示される。 実験C Win2000側でコンパイルし、HelloWorld.classをWin2000上で実行 結果C 「こんにちはみなさん!」が表示される。 という感じです。"Shift_JIS"を"EUC-JP"に変えても同じ現象。ソースファイルのエンコードをSJISからEUCに変えても同じ。改行コードもCRLFとLF両方試したがやっぱり同じ現象。 うーん。ますます気になる。 [ メッセージ編集済み 編集者: H2 編集日時 2001-11-02 23:18 ] | ||||||||||||||||
|
投稿日時: 2001-11-02 23:15
実は問題が見つかったプログラムは大学のSMTPを使用するので、私のWin2000だと実行できないんです。その代わり、もっとシンプルなHelloWorldで試したのですが、逆もやっぱりだめでした。(上記参照)各プラットフォームでコンパイルしないと文字化けしてしまいます。 1.3.0と1.3.1の違いですかねぇ。あと気になるのは日本語版Linux上ではどうかってところですね。実行環境がないんで調べにくいです。 [ メッセージ編集済み 編集者: H2 編集日時 2001-11-02 23:18 ] | ||||||||||||||||
1|2|3
次のページへ»
