- - PR -
ローカルファイル名表示で文字化け
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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に変換しておく必要がありそうです。 それ以外の回避策を探しているのですが、名案が思いつきません。 ご指導いただけませんでしょうか? | ||||
|
投稿日時: 2004-06-03 20:01
VMは指定がなければそのプラットフォームのデフォルトエンコーディングを利用します。
なので、VMのエンコーディングをShift_JISに設定すれば文字化けはしなくなるはずです。 たぶん。 | ||||
|
投稿日時: 2004-06-03 20:07
VMのデフォルトエンコーディングを変更することが出来るのでしょうか?
記憶が曖昧ですが、以前試してだめだった気がします。 「java.io.File」関連で用いているデフォルトエンコーディングをShift_JISに変更できればいいのですが、良い方法はないでしょうか? | ||||
|
投稿日時: 2004-06-04 01:07
ロケール変えればいいかな?
http://edocs.beasys.co.jp/e-docs/wls/docs81/ja/relnotes_ja.html#1157988 | ||||
|
投稿日時: 2004-06-04 11:10
すいません。
説明が抜けていたのですが、VM自体は普段EUC_JPで運用したいのです。 Servlet等で使用するVMをShift_JISで動作させるのには問題がありますので。 そこで、一時的に変更する方法があればいいなあと思ったのですが、どうやらないようですね。 そもそもServletの場合、並行して処理が走っている可能性があるので、一時的に変更するのも無理がありそうです。 格納時に変換する方法をクライアント側に実装します。 ご対応ありがとうございました。 | ||||
|
投稿日時: 2004-06-04 14:13
もう解決したようですが、ちょっと気になったので。
>Servlet等で使用するVMをShift_JISで動作させるのには問題がありますので。 実行する JVM のファイルエンコーディングはサーブレットの挙動に影響はありません。ServletAPI2.3に準拠したコンテナならデフォルトで ISO-8859-1 が使われます。 | ||||
|
投稿日時: 2004-06-04 18:16
こういう風にできます。 プログラムで指定する場合は System.setProperty("file.encoding", "MS932"); java起動時に指定する場合は java -Dfile.encoding=MS932 ご参考まで [ メッセージ編集済み 編集者: raystar 編集日時 2004-06-04 18:17 ] | ||||
|
投稿日時: 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
