« 暦変換 | メイン | フレームワーク »

Tips

javaでUTF8なファイル

Windowsクライアントから ダブルバイト ファイル名を操作すると、サーバーのWebDAV や Samba は UTF8 で処理するように設定し特に問題はなし。
昔、EUC な linux 上で問題なく動作していたファイル操作javaアプリが日本語ファイル名を見つけられなくなる。
どうやら、基本的な問題。

java.io.File.listFiles() で取得した java.io.File[] に含まれる日本語ファイルで、java.io.FileReader()とすると
Exception in thread "main" java.io.FileNotFoundException: ./漢字.txt (No such file or directory)
となる。jvm 実行時に
java -Dfile.encoding=UTF8 application
としたり、プログラム中 明示的に
System.setProperty( "file.encoding", "UTF8" );
としても改善しない。
new InputStreamReader(System.in).getEncoding())
でデフォルトのエンコーディングを調べると
EUC_JP_LINUX
つまり、シェルがUTF8のファイル名をEUCと思い込んでいた。

結論は、jvmが稼動するシェルの環境変数で解決。
export LANG=ja_JP.UTF-8

linuxアプリケーションは まだEUC前提で動作するが多いため要注意。
もともと、この問題はUTF8なファイル・フォルダをjavaでzip圧縮する案件で発生。結局こちらは問題なし。

●ディストリビューション(cat /etc/redhat-release)
CentOS release 4.6 (Final)
●カーネルバージョン(uname -r)
2.6.9-67.0.20.ELsmp
●シェル
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
●java
java version "1.6.0_07"
●WebDAV
Apache2.0、mod_encoding-20020611a.tar.gz
●Samba
3.0.25b-1.el4_6.5

トラックバック

このエントリーのトラックバックURL:
http://www.remix.asia/cgi/mt/mt-tb.cgi/6499

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)