【问题标题】:Encoding issues on Java 7 file names in OS XOS X 中 Java 7 文件名的编码问题
【发布时间】:2012-09-12 15:17:01
【问题描述】:

我有以下代码:

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.existslistFiles 返回的文件返回false!! 是什么赋予了?有没有什么办法解决这一问题?这似乎是 Java 7 的错误......

【问题讨论】:

  • 呃……看看代码? System.out
  • 在终端输出Java控制台还是IDE控制台?
  • 但是特别注意 file.exists... 为什么 file.exists 会是假的?
  • 使用 JAR 启动器(即双击)启动的应用程序也是如此:它们看不到任何带有变音符号的文件。由于 File.exists = false,任何目录过滤器都会消除这些 - 它们根本不会出现。所以这需要修复 - 我不能一直从 Eclipse 运行我的应用程序!

标签: java macos file encoding java-7


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2011-10-23
    相关资源
    最近更新 更多