OS X中Java 7文件名的编码问题
我有以下代码:OS X中Java 7文件名的编码问题,java,macos,file,encoding,java-7,Java,Macos,File,Encoding,Java 7,我有以下代码: 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());
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
对于由listFiles
返回的文件返回false
!!
有什么好处?有办法解决这个问题吗?这看起来很像Java 7的bug…在Oracle的帮助下,我们发现了一个解决方法:Eclipse中的环境变量
LC\u CTYPE
没有设置为UTF-8
(以及从JNLP或其他地方开始时)。
这解释了代码在终端上工作的原因,因为OSX终端默认情况下“设置区域设置环境变量”(该选项可以关闭,然后即使在终端中也会遇到与上述相同的问题)
在启动器中设置此环境变量可以解决此问题
我仍然认为这是java 7的一个bug,因为java 6即使没有这个变量也能工作。
呃……看看代码?System.outIn在terminal out Java控制台或IDE控制台中?您可以尝试,但请特别查看file.exists。。。为什么file.exists会为false?对于使用JAR启动器启动的应用程序也是如此(即双击):它们看不到任何使用umlauts的文件。当File.exists=false时,任何目录过滤器都将消除这些错误-它们根本不会显示。所以这需要修正-我不能一直从Eclipse运行我的应用程序!