10

有没有办法改变 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 解码:带重音符号:é à
默认解码:带重音符号:é à

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

4

3 回答 3

7

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

Java,错误 ID 4163515

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

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

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

于 2008-09-17T09:12:56.080 回答
1

引用自defaultCharset()

默认字符集在虚拟机启动期间确定,通常取决于底层操作系统的区域设置和字符集。

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

于 2008-09-17T09:12:26.457 回答
1

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

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

于 2012-10-06T16:42:42.313 回答