OS X中Java 7文件名的macos编码问题
我有以下代码:
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());
}
}
在我的文档文件夹中,我有一个名为“öß.pdf”的文件。以下是Java 6下的输出:
en_US
(...)
öß.pdf
true
(...)
但以下是Java 7下的输出:
en_US
(...)
o����.pdf
false
(...)
请特别注意file.exists
返回false
的文件是listFiles
!!
有什么好处?有办法解决这个问题吗?这看起来很像Java7的bug
# 1 楼答案
在Oracle的帮助下,我们发现了一个解决方法:在Eclipse中(以及从JNLP或其他任何地方开始时),环境变量
LC_CTYPE
没有设置为UTF-8
。 这解释了为什么代码在终端上工作,因为OS X终端在默认情况下“设置语言环境变量”(一个可以关闭的选项,然后即使在终端上也会遇到与上述相同的问题)在启动器中设置这个环境变量可以解决这个问题
我仍然认为这是java 7的一个bug,因为java 6即使没有这个变量也仍然工作。