- PR -

ローカルファイル名表示で文字化け

1
投稿者投稿内容
goody
会議室デビュー日: 2004/06/03
投稿数: 4
投稿日時: 2004-06-03 19:31
▽ローカルファイル名表示で文字化けが発生します。

環境は、UNIX(EUC)、java1.4.1_06、保存されているファイル名のエンコード(Shift_JIS)
です。

FTPでWindowsからUNIXに格納しているのですが、そのファイルの一覧をjavaで表示しよう
とすると文字化けが発生します。

----------------------------------------

File nowDir = new File("<任意のパス>");
File[] fileList = nowDir.listFiles();
if(fileList == null) {
return;
}
for(int i = 0; fileList.length > i; i++) {
System.out.println(fileList[i].getName());
}

InputStreamReader in = new InputStreamReader(System.in);
System.out.println(in.getEncoding());

----------------------------------------

▽出力例

??????????G????0762.doc
employee.csv
EUC_JP

----------------------------------------

そもそも「java.io.File.getName()」は内部処理で文字コードをその環境のデフォルト
エンコーディングとしているのでしょうか?
であれば、今回の場合、ファイルを格納する前にEUC_JPに変換しておく必要がありそうです。

それ以外の回避策を探しているのですが、名案が思いつきません。

ご指導いただけませんでしょうか?


Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-06-03 20:01
VMは指定がなければそのプラットフォームのデフォルトエンコーディングを利用します。
なので、VMのエンコーディングをShift_JISに設定すれば文字化けはしなくなるはずです。
たぶん。
goody
会議室デビュー日: 2004/06/03
投稿数: 4
投稿日時: 2004-06-03 20:07
VMのデフォルトエンコーディングを変更することが出来るのでしょうか?
記憶が曖昧ですが、以前試してだめだった気がします。

「java.io.File」関連で用いているデフォルトエンコーディングをShift_JISに変更できればいいのですが、良い方法はないでしょうか?

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-04 01:07
ロケール変えればいいかな?
http://edocs.beasys.co.jp/e-docs/wls/docs81/ja/relnotes_ja.html#1157988
goody
会議室デビュー日: 2004/06/03
投稿数: 4
投稿日時: 2004-06-04 11:10
すいません。
説明が抜けていたのですが、VM自体は普段EUC_JPで運用したいのです。
Servlet等で使用するVMをShift_JISで動作させるのには問題がありますので。

そこで、一時的に変更する方法があればいいなあと思ったのですが、どうやらないようですね。
そもそもServletの場合、並行して処理が走っている可能性があるので、一時的に変更するのも無理がありそうです。

格納時に変換する方法をクライアント側に実装します。

ご対応ありがとうございました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-04 14:13
もう解決したようですが、ちょっと気になったので。

>Servlet等で使用するVMをShift_JISで動作させるのには問題がありますので。
実行する JVM のファイルエンコーディングはサーブレットの挙動に影響はありません。ServletAPI2.3に準拠したコンテナならデフォルトで ISO-8859-1 が使われます。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-06-04 18:16
引用:

VMのデフォルトエンコーディングを変更することが出来るのでしょうか?



こういう風にできます。

プログラムで指定する場合は
System.setProperty("file.encoding", "MS932");

java起動時に指定する場合は
java -Dfile.encoding=MS932

ご参考まで

[ メッセージ編集済み 編集者: raystar 編集日時 2004-06-04 18:17 ]
goody
会議室デビュー日: 2004/06/03
投稿数: 4
投稿日時: 2004-06-04 18:33
ご回答ありがとうございます。

----------------------------------------

プログラムの先頭付近に
System.setProperty("file.encoding", "MS932");
で試してみたところ、下記のようになりました。

??????????G????0762.doc
employee.csv
windows-31j

----------------------------------------

System.setProperty("file.encoding", "Shift_JIS");
で試してみたところ、下記のようになりました。

??????????G????0762.doc
employee.csv
SJIS

----------------------------------------

java -Dfile.encoding=MS932 classname
java -Dfile.encoding=Shift_JIS classname
java -Dfile.encoding=SJIS classname

は正しくファイル名を表示できました。

----------------------------------------

この結果から起動時にエンコーディングを指定しておかなければならないということでしょうか?


1

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