2016-09-27 38 views
1

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

回答

1

應該定義環境變量LC_ALL。在我的情況下,我將它設置爲LC_ALL = en_US.UTF-8。 我用upstart腳本啓動了Tomcat,而java在這個腳本之外沒有看到enverinment變量。在我將這個env添加到tomcat.conf後,問題得到修復。

ENV LC_ALL =的en_US.UTF-8

相關問題