Java 在linux Tomcat下创建文件,文件名中使用unicode字符

Java 在linux Tomcat下创建文件,文件名中使用unicode字符,java,tomcat,encoding,Java,Tomcat,Encoding,非常简单的代码: try { new File("/home/user/programm/log/тест1.log").createNewFile(); } catch (Exception e) { System.out.println(e); } 当我以简单java应用程序的形式运行它时,它工作得很好,但当我在Tomcat下运行它时,结果是??.1.log文件名 环境: Ubuntu 14.04 雄猫8 爪哇8 我已经尝试过的: 使用以下选项运行tomcat:

非常简单的代码:

try {
     new File("/home/user/programm/log/тест1.log").createNewFile();
} catch (Exception e) {
     System.out.println(e);
}
当我以简单java应用程序的形式运行它时,它工作得很好,但当我在Tomcat下运行它时,结果是??.1.log文件名

环境:

  • Ubuntu 14.04
  • 雄猫8
  • 爪哇8
我已经尝试过的: 使用以下选项运行tomcat:

  • -文件编码=UTF-8
  • -Dsun.jnu.encoding=UTF-8
我的区域设置环境如下所示:

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.createFileExclusive调用String.getBytes方法,参数charsetName=ANSI_X3.4-1968。在我用file.encoding和sun.jnu.encoding重新定义它们之前,这个编码是默认的。我可以通过JVisualVm查看这些变量的UTF-8。

应该定义环境变量LC\u ALL。在我的例子中,我将其设置为LC\u ALL=en\u US.UTF-8。 我用upstart脚本启动Tomcat,java在脚本之外没有看到环境变量。在我将这个env添加到tomcat.conf之后,问题得到了解决

环境LC_ALL=en_US.UTF-8