我正在尝试将主要在 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/
这有助于读取文件名,但我还没有找到使用正确编码文件名创建新文件的解决方案。