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个或更多字符时!
我错过了什么吗?
答案 0 :(得分:0)
如果你想测试getBytes
返回的字节,你应该直接测试它们,而不是将它们转换回另一个字符串。
byte[] actual = "Oberbüren".getBytes("ISO-8859-1");
byte[] expected = new byte[] { 0x4f, 0x62, 0x65, 0x72, 0x62, 0xfc, ....};
assertArrayEquals(expected, actual);
单参数String构造函数总是使用平台默认编码将字节解码为字符,您应该总是更喜欢双参数版本,您可以在其中明确指定正确的编码。