ファイルでさまざまなIO操作を行うコードを扱っています。国際的なファイル名を処理できるようにしたいのです。私はJava 1.5でMacで作業しています。ファイル名にサロゲートを必要とするUnicode文字が含まれていると、JVMはそのファイルを見つけることができません。例えば、私のテストファイルがある:Javaの文字\u8349\uD85B\uDFF6\u9DD7\u5916.gif
Javaは、ファイル名で代理Unicode値を持つファイルを開くことができませんか?
私はこのファイル名からファイルを作成した場合、私はするFileNotFound例外を取得するので、私はそれを開くことができませんに分かれます
"草鷗外.gif"
。でも、失敗したファイルを含むフォルダにこれを使用して:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
は、私が実際に取り扱っておりますコードのほとんどの形式は次のとおりです。
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
は、私はこの問題に対処することができますいくつかの方法があり、ファイル名をエスケープするか、ファイルを別々に開くかのどちらかです。
環境内のCharset.defaultCharset()の値は何ですか? –
(残念なことに、StackOverflowにもサロゲートに問題があり、質問からU + 26FF6表意文字を削除しました) – bobince
System.getProperty( "file.encoding")が返すものを提供できますか?エンコードjava -dfile.encoding = ENCODING_GOES_HEREを変更して、システムのロケールを変更しないようにしてください。これもまた効かなければ、我々は専門家がそれを解決するのを待つでしょう。 – JCasso