在linux Tomcat下创建文件,文件名为

时间:2016-09-27 13:48:59

标签: java tomcat encoding

非常简单的代码:

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。

1 个答案:

答案 0 :(得分:1)

应定义环境变量LC_ALL。在我的情况下,我将其设置为 LC_ALL = en_US.UTF-8 。 我使用upstart脚本启动了Tomcat,java没有看到此脚本之外的enverinment变量。我把这个env添加到tomcat.conf后修复了问题。

  

env LC_ALL = en_US.UTF-8