主に Mac OSX で実行されているアプリケーションを Java6 から Java7 に更新しようとしています。「föhn.txt」などの特殊文字がファイル名に含まれるファイルが、Java7 で「f?hn.txt」として作成されることがあります。
この並べ替えの例を Mac で実行する場合
File file = new File("föhn.txt");
file.createNewFile();
- Java6 の場合: föhn.txt
- Java7 の場合: f?hn.txt
このトピックには似たようなスレッドがあることは知っています:
JVM引数を設定しようとしまし-Dfile.encoding=UTF8
たが、これはファイル名には影響しません。コンパイラとソースはutf-8に設定されています。これが OS X 上の Java7 で機能しない理由がわかりません。
更新: 私は eclipse と Netbeans 内で例を試しましたが、最終的なアプリケーションは jdk (appbundler) にバンドルされています。
Mac OS X は分解された UTF-8 形式を使用します: File.listFiles() は JDK 6 で Unicode 名をマングルします (Unicode 正規化の問題)
このトピックに関するブログ: http://shlrm.org/blog/2012/10/04/osx-java-utf-8-oh-my/
これはファイル名の読み取りに役立ちますが、正しいエンコードされたファイル名で新しいファイルを作成するための解決策が見つかりませんでした。