2016-09-27 20 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。エンコード= 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変数を見ませんでした。 tomcat.confにこのenvを追加した後の問題は修正されました。

ENV LC_ALL = EN_US.UTF-8

関連する問題