String.getBytes 似乎不适用于名为“Oberbüren”的村庄:
@Test
public void getBytes_buggy() throws Exception {
// all chars after 'ü' are missing
final String actual = new String("Oberbüren".getBytes("ISO-8859-1"));
assertEquals("Oberb�", actual);
}
@Test
public void getBytes_working() throws Exception {
// with 4 chars after 'ü' it works
final String actual = new String("Oberbüren12".getBytes("ISO-8859-1"));
assertEquals("Oberb�ren12", actual);
}
有趣的是,它与“ä”、“ö”一起使用,并且当“ü”后面有 5 个或更多字符时!
我错过了什么吗?
最佳答案
如果您想测试 getBytes
返回的字节,那么您应该直接测试它们,而不是将它们转换回另一个字符串。
byte[] actual = "Oberbüren".getBytes("ISO-8859-1");
byte[] expected = new byte[] { 0x4f, 0x62, 0x65, 0x72, 0x62, 0xfc, ....};
assertArrayEquals(expected, actual);
单参数 String 构造函数始终使用平台默认编码将字节解码为字符,您应该始终首选可以显式指定正确编码的双参数版本。
关于java - 字符串 getBytes ISO-8859-1 'ü' bug 字符在 'ü' 丢失后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802552/