我在Java中阅读了一些关于String.getBytes(Charset)方法的文档。
它用于将String转换为字节数组(字节类型可以获得值-2 ^ 7到2 ^ 7-1)。
据我所知,UTF-8字符集中的每个字符可以使用1-4个字节。如果UTF-8字符集中的字符代码大于2 ^ 7-1?
会发生什么我试过
String s =“Hélô”
然后我得到了这样的'HélÃ'':
String sr = new String(s.getBytes(“UTF-8”),Charset.forName(“UTF-8”));
我希望它返回原始价值'Hélô'。
有谁可以形容这个?谢谢。 (抱歉我的英文)
答案 0 :(得分:7)
正如Jon已经说过的,原因是你使用了不同的编码。在UTF-8编码中,字符é
和ô
分别编码为两个字节。
ISO-8859-1: H é l ô
bytes: 48 E9 6C F4
UTF-8 : H é l ô
bytes: 48 C3A9 6C C3B4
错误字符串结果的示例以字节为单位,如下所示
UTF-8 bytes interpreted as ISO-8859-1
H à © l à ´
48 C3 A9 6C C3 B4