首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置缺省Java字符编码

设置缺省Java字符编码
EN

Stack Overflow用户
提问于 2008-12-12 13:31:22
回答 16查看 731.6K关注 0票数 388

如何以编程方式正确设置JVM (1.5.x)使用的默认字符编码?

我读到过,-Dfile.encoding=whatever曾经是较旧的JVM的首选。我没有那种奢侈的东西,因为我不想说。

我试过了:

代码语言:javascript
复制
System.setProperty("file.encoding", "UTF-8");

并且设置了该属性,但它似乎不会导致下面的最终getBytes调用使用UTF8:

代码语言:javascript
复制
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());
EN

回答 16

Stack Overflow用户

发布于 2013-02-21 03:09:05

我有一个非常好用的方法!!

代码语言:javascript
复制
System.setProperty("file.encoding","UTF-8");
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);

这样,您将欺骗JVM,它会认为没有设置字符集,并使其在运行时再次将其设置为UTF-8!

票数 75
EN

Stack Overflow用户

发布于 2008-12-12 05:39:50

我认为比设置平台的默认字符集更好的方法是调用更安全的String.getBytes("charsetName"),特别是在您似乎对影响应用程序部署有限制的情况下,更不用说平台了。这样,您的应用程序就不会依赖于它无法控制的东西。

我个人认为String.getBytes()应该被弃用,因为在我见过的许多情况下,它造成了严重的问题,开发人员没有考虑到默认字符集可能会发生变化。

票数 39
EN

Stack Overflow用户

发布于 2008-12-12 05:36:04

我无法回答您最初的问题,但我想给您一些建议--不要依赖于JVM的缺省编码。最好总是显式地指定所需的编码(即"UTF-8")。这样,您就知道即使在不同的系统和JVM配置中也能正常工作。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/361975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档