6

我有以下代码:

public static void main( String[] args ) {
    System.out.println(Locale.getDefault());
    File f = new File("/Users/johngoering/Documents");
    File[] fs = f.listFiles();
    for (File ff : fs) {
        System.out.println(ff.getName());
        System.out.println(ff.exists());
    }
}

在我的 Documents 文件夹中,我有一个名为“öß.pdf”的文件。这是 Java 6 下的输出:

 en_US
 (...)
 öß.pdf
 true
 (...)

但这里是 Java 7 下的输出:

 en_US
 (...)
 o����.pdf
 false
 (...)

特别注意,返回由!!file.exists返回的文件 是什么赋予了?有没有什么办法解决这一问题?这似乎是 Java 7 的错误……falselistFiles

4

1 回答 1

9

在 Oracle 的帮助下,我们发现了一种解决方法:环境变量LC_CTYPEUTF-8在 Eclipse 中设置(以及从 JNLP 或其他任何地方开始时)。这解释了为什么代码在终端上工作,因为默认情况下 OS X 终端“设置语言环境变量”(一个可以关闭的选项,然后即使在终端中也会遇到与上述相同的问题)。

在启动器中设置这个环境变量解决了这个问题。

我仍然认为这是 Java 7 的错误,因为即使没有这个变量,Java 6 仍然可以工作。

于 2012-09-20T10:05:47.310 回答