java - 字符串 getBytes ISO-8859-1 'ü' bug 字符在 'ü' 丢失后

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

我错过了什么吗?

最佳答案

如果您想测试 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/

相关文章:

Java供应商可以优化对象实例化过程吗?

在 C 中初始化以 NULL 结尾的字符串数组的正确方法

c++ - 使用 std::string::erase 从字符串中删除起始字符

character-encoding - 精通编码的 grep 替代品?

windows "zip folders"文件编码

JDBC 的 Java 线程

java - axis Web 服务日志记录问题

java - 用java读取混合数据的文件

python - 通过 URL 发送列表

c - 使用c代码从文件中读取字符