如何以编程方式正确设置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());
发布于 2013-02-21 03:09:05
我有一个非常好用的方法!!
System.setProperty("file.encoding","UTF-8");
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
这样,您将欺骗JVM,它会认为没有设置字符集,并使其在运行时再次将其设置为UTF-8!
发布于 2008-12-12 05:39:50
我认为比设置平台的默认字符集更好的方法是调用更安全的String.getBytes("charsetName")
,特别是在您似乎对影响应用程序部署有限制的情况下,更不用说平台了。这样,您的应用程序就不会依赖于它无法控制的东西。
我个人认为String.getBytes()
应该被弃用,因为在我见过的许多情况下,它造成了严重的问题,开发人员没有考虑到默认字符集可能会发生变化。
发布于 2008-12-12 05:36:04
我无法回答您最初的问题,但我想给您一些建议--不要依赖于JVM的缺省编码。最好总是显式地指定所需的编码(即"UTF-8")。这样,您就知道即使在不同的系统和JVM配置中也能正常工作。
https://stackoverflow.com/questions/361975
复制相似问题