java utf8编码-char,字符串类型

public class UTF8 {

public static void main(String[] args){

String s = "ヨ"; //0xFF6E

System.out.println(s.getBytes().length);//length of the string

System.out.println(s.charAt(0));//first character in the string

}

}

3

请帮助我理解这一点。试图了解编码" title="utf8编码">utf8编码在Java中的工作方式。按照char java doc定义

这是否意味着Java中的char类型只能支持那些可以用2个字节表示的unicode字符,且不能超过2个字节?

在上面的程序中,为该字符串分配的字节数为3,但是在返回第一个字符的第三行中(java中为2个字节)可以容纳3个字节长的字符吗?真的很困惑吗?

在Java / General中有关此概念的任何良好参考都将受到赞赏。

回答:

您的代码示例中没有任何内容直接使用UTF-8。而是使用UTF-16在内存中对Java字符串进行编码。不适合单个16位字符的Unicode代码点将使用称为代理对的2个字符对进行编码。

如果未将参数值传递给String.getBytes(),它将返回一个字节数组,该数组的String内容使用基础操作系统的默认字符集进行编码。如果要确保使用UTF-8编码的数组,则需要getBytes("UTF-8")改用。

调用String.charAt()仅从String的内存存储中返回原始UTF-16编码的char。

因此,在您的示例中,Unicode字符使用UTF-16编码的两个字节(或取决于字节序)存储在String内存中,但使用三个字节(使用任何操作系统进行编码)存储在字节数组中默认字符集为。0x6E

0xFF``0xFF 0x6E``getBytes()

在UTF-8中,该特定Unicode字符也恰好使用3个字节(0xEF 0xBD 0xAE)。

以上是 java utf8编码-char,字符串类型 的全部内容, 来源链接: utcz.com/qa/420155.html

回到顶部