题
有没有办法更改 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 之前更改区域设置;看:
有些地方似乎暗示你可以通过在启动 JVM 时设置 file.encoding 变量来做到这一点,例如
java -Dfile.encoding=UTF-8 ...
...但我自己还没有尝试过。最安全的方法是在操作系统中设置环境变量。
其他提示
我想你想要这个:System.setProperty("文件.编码", "UTF-8");
它解决了一些问题,但我还有其他问题。如果 SO 为 ISO-8859-1,则字符“í”和“Í”无法正确转换。只要在启动时使用 JVM 选项,我就解决了这个问题。现在,当显示特殊字符时,NetBeans IDE 中的 Java 控制台会导致字符集崩溃。
不隶属于 StackOverflow