web-dev-qa-db-ja.com

JVMのデフォルトのエンコーディングは何ですか?

UTF-8はJavaのデフォルトのエンコーディングですか?
そうでない場合、どのエンコードがデフォルトで使用されているかをどのように確認できますか?

49
user67722

JVMのデフォルトの文字セットは、実行中のシステムの文字セットです。これに特定の値はありません。通常、特定の値であるデフォルトのエンコーディングに依存するべきではありません。

Charset.defaultCharset()を使用して実行時にアクセスできますが、実際に使用する場合は常に明示的にエンコードを指定を指定する必要があります。

85
Andrzej Doyle

紛らわしい名前のプロパティfile.encodingを使用して、JVMのデフォルトエンコーディングを変更できることに注意してください。

アプリケーションがエンコードに特に敏感な場合(デフォルトエンコードを意味するAPIの使用などにより)、JVMの起動時に一貫して(既知の)値に明示的に設定する必要があります。

29
Brian Agnew

3つの「デフォルト」エンコーディングがあります。

  • file.encoding:
    System.getProperty("file.encoding")

  • Java.nio.Charset:
    Charset.defaultCharset()

  • そして、InputStreamReaderのエンコーディング:
    InputStreamReader.getEncoding()

詳しくは このページ をご覧ください。

22
mrclrchtr

これは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/

9
mike32b

これを使用して、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
7
sdc

ロケールに依存します。異なるロケール、異なるデフォルトエンコーディング。

6
skaffman

デフォルトを取得するには、Java設定を使用します:

Java -XshowSettings 
4
Juwit