非常简单的代码:
try {
new File("/home/user/programm/log/тест1.log").createNewFile();
} catch (Exception e) {
System.out.println(e);
}
当我将它作为简单的Java应用程序运行时,它运行良好,但是当我在Tomcat下运行时,这会产生 ???? 1.log 文件名。
Environement:
我已经尝试过: 用选项运行tomcat:
我的语言环境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。
答案 0 :(得分:1)
应定义环境变量LC_ALL。在我的情况下,我将其设置为 LC_ALL = en_US.UTF-8 。 我使用upstart脚本启动了Tomcat,java没有看到此脚本之外的enverinment变量。我把这个env添加到tomcat.conf后修复了问题。
env LC_ALL = en_US.UTF-8