非常簡單的代碼:在文件名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。