更改String的默认编码(byte [])

时间:2008-09-17 09:06:34

标签: java encoding

有没有办法改变String(byte [])构造函数使用的编码?

在我自己的代码中,我使用String(byte [],String)来指定编码,但我使用的是无法更改的外部库。

String src = "with accents: é à";
byte[] bytes = src.getBytes("UTF-8");
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8"));
System.out.println("Default decoded: "+new String(bytes));

这个输出是:

UTF-8 decoded: with accents: é à
Default decoded: with accents: é à

我尝试更改系统属性file.encoding,但它不起作用。

3 个答案:

答案 0 :(得分:7)

您需要在启动JVM之前更改语言环境;见:

Java, bug ID 4163515

有些地方似乎暗示你可以通过在启动JVM时设置file.encoding变量来实现这一点,例如

java -Dfile.encoding=UTF-8 ...

...但我自己没试过。最安全的方法是在操作系统中设置环境变量。

答案 1 :(得分:1)

引自defaultCharset()

  

确定默认字符集   在虚拟机启动过程中   通常取决于区域设置和   基础操作的字符集   系统

在大多数操作系统中,您可以使用环境变量设置字符集。

答案 2 :(得分:1)

我想你想要这个:System.setProperty(“file.encoding”,“UTF-8”);

它解决了一些问题,但我还有另一个问题。如果SO是ISO-8859-1,则字符“í”和“Í”不能正确转换。只需在启动时使用JVM选项,我就可以解决它。现在,只有我在NetBeans IDE中的Java控制台在显示特殊字符时才会崩溃字符集。