无论如何在java中运行时更新默认的charset编码?感谢,
答案 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
}
}