- - PR -
リモートシェルから呼ばれたSystem.out.println()の文字化け
1
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-28 12:56
Javaプログラムをシェルから読んで実行しているのですが、
そのシェルをリモートから呼ぶと文字化けを起してしまいます。 具体的にはLinux上からrshコマンドで呼んでいるのですが、 英数字以外が全て「?」に化けてしまいます。(呼ばれる側のOSもLinuxです。) また、Javaプログラム内で出力する文字列をEUC_jpに変換しても 同じでした。 こちらのあたりについて、ご教授いただきたいと思っています。 よろしくお願いいたします。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-07-28 17:23
「シェル」というのは「シェルスクリプト」のことですね?
Javaのプログラムの先頭に
を挿入して、ローカルで実行して上手くいくときと、リモートで実行して上手くいかないときの差を確認してみてください。 次に、Javaプログラムを起動するシェルスクリプトの先頭に、
を挿入して、ローカルで上手くいくときとリモートで上手くいかないときの差を確認してみてください。
どうやって変換してどうやって表示しました? | ||||||||||||||||||||||||||||
|
投稿日時: 2006-08-03 12:00
返信が遅れまして申し訳ありません。
スフレさん、ご回答いただきありがとうございます。 以下、試した結果を記載します。
説明不足でスミマセン、シェルスクリプトのことです。
・上手くいくとき 「EUC-JP-LINUX」 ・上手くいかないとき 「ANSI_X3.4-1968」 となりました。
・上手くいくとき --------------------------- ja_JP.eucJP --------------------------- ・上手くいかないときは --------------------------- --------------------------- となりました。$LC_ALLの箇所はどちらも空白でした。
String message ="あいうえお"; byte[] eucjpBytes = message.getBytes("EUC_jp"); String msg = new String(eucjpBytes,"EUC_jp"); System.out.println(msg); といった具合です。 色々いただいたヒントを基に、Javaプログラムを起動するシェルスクリプトの先頭で、 「export LANG=ja_JP.eucJP」と記述したところ、文字化けが発生しないようになり ました。rshだとLANGなどのユーザの環境変数は上手く拾えなかったりするんでしょうか? cronで同じシェルを呼んでみても同じ現象になったりもしたのですが… | ||||||||||||||||||||||||||||
|
投稿日時: 2006-08-03 16:36
これは、Unicode→EUC→Unicode としているダケなので、「String msg = message;」と同じことで、意味がありません。「System.out.write(eucjpBytes);」だったら上手く見えたかも知れません。
シェルにもよりますが、interactive shell と non-interactive shell では読まれる設定ファイルなどが異なることが多いです。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-08-06 08:33
interactive shell と non-interactive shell について、勉強したいと思います。 Javaについてもシェル(シェルスクリプト)についても、もっと勉強が必要だなと 改めて思いました。 ありがとうございました。 |
1