UTF-8はJavaのデフォルトのエンコーディングですか?
そうでない場合、どのエンコードがデフォルトで使用されているかをどのように確認できますか?
JVMのデフォルトの文字セットは、実行中のシステムの文字セットです。これに特定の値はありません。通常、特定の値であるデフォルトのエンコーディングに依存するべきではありません。
Charset.defaultCharset()
を使用して実行時にアクセスできますが、実際に使用する場合は常に明示的にエンコードを指定を指定する必要があります。
紛らわしい名前のプロパティfile.encoding
を使用して、JVMのデフォルトエンコーディングを変更できることに注意してください。
アプリケーションがエンコードに特に敏感な場合(デフォルトエンコードを意味するAPIの使用などにより)、JVMの起動時に一貫して(既知の)値に明示的に設定する必要があります。
3つの「デフォルト」エンコーディングがあります。
file.encoding:System.getProperty("file.encoding")
Java.nio.Charset:Charset.defaultCharset()
そして、InputStreamReaderのエンコーディング:InputStreamReader.getEncoding()
詳しくは このページ をご覧ください。
これはJVM実装固有のものであると確信していますが、次のコマンドを実行することで、JVMのデフォルトのfile.encodingに「影響」を与えることができました。
export LC_ALL=en_US.UTF-8
(Ubuntu 12.04でJavaバージョン1.7.0_80を実行)
また、Unixコンソールから「ロケール」と入力すると、詳細情報が表示されます。
すべてのクレジットは http://www.philvarner.com/2009/10/24/unicode-in-Java-default-charset-part-4/
これを使用して、JVMのデフォルトを出力できます
import Java.nio.charset.Charset;
import Java.io.InputStreamReader;
import Java.io.FileInputStream;
public class PrintCharSets {
public static void main(String[] args) throws Exception {
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Charset.defaultCharset=" + Charset.defaultCharset());
System.out.println("InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("./PrintCharSets.Java")).getEncoding());
}
}
コンパイルして実行
javac PrintCharSets.Java && Java PrintCharSets
ロケールに依存します。異なるロケール、異なるデフォルトエンコーディング。
デフォルトを取得するには、Java設定を使用します:
Java -XshowSettings