- - PR -
Javaのプラットフォーム互換(文字エンコード)
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2001-11-03 12:11
http://java.sun.com/j2se/1.3/ja/docs/ja/guide/intl/encoding.doc.html を見てもらうと分かりますが、-encodingで指定するエンコーディングが ちょっと違います。"Shift_JIS"→"SJIS"、"EUC-JP"→"EUC_JP"です。 | ||||
|
投稿日時: 2001-11-03 13:42
いや、"SJIS"でも"Shift_JIS"でも変わりはないのでは?
存在しない文字コードを使用するとコンパイル時には:
実行時にもjava.io.UnsupportedEncodingExceptionが送出されるはずです。 一応ソースファイルを"SJIS"と"EUC_JP"で指定しましたが、症状は同じでした。 | ||||
|
投稿日時: 2001-11-03 16:10
う〜ん、そうなると難しいですねぇ。
現在、開発時にNT 4.0 + J2SDK1.3.1 + CygwinでEUCで作成して、.classはそのまま 稼働環境の Miracle Linux 1.0 + J2SDK1.3.1に持ってって動かしていますけど、 特に文字化けすることはないですが… ただ、scpは使ったことが無くて、いつもftpですが。 | ||||
|
投稿日時: 2001-11-03 22:15
これで実験してみてください。 | ||||
|
投稿日時: 2001-11-03 22:24
はぅん…バックスラッシュのエスケープがされないのね…
String word = new String("\\u3053\\u3093\\u306b\\u3061\\u306f"); です。 | ||||
|
投稿日時: 2001-11-04 03:38
上記のプログラムを 1.3.1 でコンパイルし、1.3.0_01 で実行したところ、大丈夫ですね。逆もOK。どちらも Linux です。
ただし、class ファイルがサイズは同じで中身が違いました。とはいえ、hexdump の結果を見る限り、文字列が違うような印象はうけませんでしたが。javap -c によるディスアセンブルコードは同じでした。 | ||||
|
投稿日時: 2001-11-04 08:12
しょむさんのコードを試したところ、今度はLinux上でコンパイルしても??????になってしまいました。Win2000だとちゃんと文字列が表示されます。 オリジナルのHelloWorldをWinでコンパイルしたのをLinuxでjavap -c を使ったところ、文字列のところだけだけ綺麗に”?????”になっていました。逆もまた同じ。プラットフォーム上でコンパイルすると、”?????”ではなく”こんにちはみなさん”に入れ替わります。 ちょっと気になって、自分のRedHat7.1(英語)にJSDK1.3.1(日本語版)をいれてみたところ、同じ現象でした。多分JSDKは何語でもまったく同じだと思うので英語版Linuxがいけないのではないかと思うのですが。しょむさんのはLinuxは両方とも日本語版ですか?tetsuさんのMiracle Linuxは日本語版ですよね。 | ||||
|
投稿日時: 2001-11-04 15:38
う〜ん、Unicode escape のものがうまく表示されない?
Linux でコンパイルしたものが同じ Linux で? それはあきらかに jdk か jvm か glibc か設定がおかしい。 まず、LANG は設定されていますか?LANG=ja_JP.eucJP。 これがないと、当然デフォルトの C locale なので ISO8859-1 しか理解してくれず、????? になりますよ。
表示は「?」になっても、下にでている内部文字コードはダンプされていますので、コンパイル時の問題なのか実行時の問題なのかは切り分けできると思うのですが。 WinでコンパイルしたクラスをLinuxで実行した時に 3053...306f となっていなければ、コンパイル時の問題。なっているのであれば、実行環境の問題。 | ||||
