非常简单的代码:在文件名Unicode字符linux下的Tomcat创建文件
try {
new File("/home/user/programm/log/тест1.log").createNewFile();
} catch (Exception e) {
System.out.println(e);
}
当我运行这个简单的Java应用程序,它工作得很好,但是当我运行这个在Tomcat下,这将导致? 1.log文件名。
Environement:
- 的Ubuntu 14.04
- Tomcat的8
- 的Java 8
我已经尝试过: 运行Tomcat的选项:
- -Dfile。 encoding = UTF-8
- -Dsun.jnu.encoding = UTF-8
我的语言环境ENV看起来是这样的:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
一些调查:
调试到File.createNewFile方法后,我发现本地方法java.io.UnixFileSystem.createFileExclusively调用带有参数charsetName = ANSI_X3.4-1968的String.getBytes方法。在我通过file.encoding和sun.jnu.encoding重新定义它们之前,此编码是默认编码。通过JVisualVm我可以看到这些变量的UTF-8。