1. ホーム
  2. java

[解決済み] Java のデフォルト文字エンコーディングの設定

2022-03-24 19:09:52

質問

JVM (1.5.x) で使用されるデフォルトの文字エンコードをプログラムで適切に設定するにはどうすればよいですか?

私は、以下のことを読みました。 -Dfile.encoding=whatever は、古いJVMのために行くための方法であった。私は、理由はわかりませんが、そのような贅沢はしていません。

試してみました。

System.setProperty("file.encoding", "UTF-8");

そして、プロパティは設定されますが、最終的な getBytes の呼び出しがUTF8を使用するようになりました。

System.setProperty("file.encoding", "UTF-8");

byte inbytes[] = new byte[1024];

FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
FileOutputStream fos = new FileOutputStream("response-2.txt");
String in = new String(inbytes, "UTF8");
fos.write(in.getBytes());

解決方法は?

残念ながら file.encoding プロパティはJVMの起動時に指定する必要があります。メイン・メソッドが入力されるまでに String.getBytes() のデフォルトコンストラクタは InputStreamReaderOutputStreamWriter は永久にキャッシュされます。

として エドワード・グレック氏が指摘する。 このような特殊なケースでは、環境変数 JAVA_TOOL_OPTIONS できる がありますが、通常はこのように指定します。

java -Dfile.encoding=UTF-8 … com.x.Main

Charset.defaultCharset() への変更が反映されます。 file.encoding プロパティがありますが、コアJavaライブラリの中でデフォルトの文字エンコーディングを決定する必要があるコードのほとんどは、このメカニズムを使用していません。

エンコードやデコードの際に file.encoding プロパティまたは Charset.defaultCharset() で現在のデフォルトエンコーディングを調べ、 適切なメソッドやコンストラクタのオーバーロードでそれを指定します。