字符串getBytes ISO-8859-1'''''''''''''''''''''''''''''''''''

时间:2014-07-17 11:41:23

标签: java string character-encoding

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个或更多字符时!

我错过了什么吗?

1 个答案:

答案 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构造函数总是使用平台默认编码将字节解码为字符,您应该总是更喜欢双参数版本,您可以在其中明确指定正确的编码。

相关问题