Java的String.GetBytes(Charset)中的UTF-8

时间:2015-11-13 09:54:36

标签: java encoding utf-8 character-encoding

我在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ô'。

有谁可以形容这个?谢谢。 (抱歉我的英文)

1 个答案:

答案 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