非常に簡単なコード:ファイル名に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を見ることができます。