有没有办法更改 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 但它不起作用。

有帮助吗?

解决方案

您需要在启动 JVM 之前更改区域设置;看:

Java,错误 ID 4163515

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

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

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

其他提示

引自 默认字符集()

默认的Charset是在虚拟机启动期间确定的,通常取决于基础操作系统的语言环境和字符。

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

我想你想要这个:System.setProperty("文件.编码", "UTF-8");

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top