2

我正在尝试将主要在 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/

这有助于读取文件名,但我还没有找到使用正确编码文件名创建新文件的解决方案。

4

1 回答 1

2

感谢@Duralumin 的正确提示。

从 eclipse、netbeans 或与 JRE (appbundle) 捆绑的应用程序直接使用 Java7 的 java 二进制文件。从命令行调用 java 将使用来自 Apple 的文件 /usr/bin 下的二进制文件。出于这个原因,它可以从命令行工作。

在 eclipse 或 netbeans 中,您必须在运行配置中设置 Environment,只需添加:

LC_TYPE = "UTF-8"

在我添加的 Appbundle 中

setenv("LC_CTYPE","UTF-8",1);

到我正在使用的本机(Objective-C)JavaAppLauncher。

于 2013-03-14T08:57:20.827 回答