在java中运行时更新默认的charset编码?

时间:2012-02-14 19:28:44

标签: java encode

无论如何在java中运行时更新默认的charset编码?感谢,

1 个答案:

答案 0 :(得分:5)

不,没有切实可行的方法来改变它。例如,在OpenJDK中,当虚拟机启动时,会从file.encoding系统属性中读取默认字符集,并将其存储在Charset类的私有静态字段中。如果需要使用不同的编码,则应使用允许指定编码的类。

您可以通过反思改变私人领域来破解自己的方式。如果您确实如此,真的,则没有其他选择。您将代码定位到特定JVM的特定版本,并且它可能不适用于其他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
    }
}