Javaで実行時にデフォルトのcharsetエンコーディングを更新する方法はありますか?ありがとう、Javaで実行時にデフォルトのcharsetエンコーディングを更新しますか?
0
A
答えて
4
いいえ、それを実際に変更する方法はありません。たとえば、OpenJDKでは、デフォルトの文字セットはfile.encoding
システムプロパティから読み込まれ、仮想マシンが起動し、Charset
クラスのプライベート静的フィールドに格納されます。別のエンコーディングを使用する必要がある場合は、エンコーディングを指定できるクラスを使用する必要があります。
あなたは、リフレクションによってプライベートフィールドを変更することで、ハックすることができます。これはあなたが実際に試みるかもしれない何かです、本当に、他のオプションがありません。コードを特定のバージョンの特定のJVMに限定しているので、他のバージョンでは機能しない可能性があります。これはOpenJDKの現在のバージョンでデフォルトの文字セットを変更する方法です:
import java.nio.charset.Charset;
import java.lang.reflect.*;
public class test {
public static void main(String[] args) throws Exception {
System.out.println(Charset.defaultCharset());
magic("latin2");
System.out.println(Charset.defaultCharset());
}
private static void magic(String s) throws Exception {
Class<Charset> c = Charset.class;
Field defaultCharsetField = c.getDeclaredField("defaultCharset");
defaultCharsetField.setAccessible(true);
defaultCharsetField.set(null, Charset.forName(s));
// now open System.out and System.err with the new charset, if needed
}
}
あなたはそれを検索しようとしましたか?重複していますか? http://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding –