UTF-16理解学习(java)

  巩固java知识,java核心卷对于UTF-16的论述,让我的理解有点模糊。因此查了下UTF-16的wiki文档,理解了下。

  总结一下:Unicode编码从U+0000到U+10FFFF,共有1,112,064个码位映射字符。Unicode的编码空间划分17个平面,每个平面包含65,536个码位。17个平面的码位可表示为从U+xx0000到U+xxFFFF。第一个平面称为基本多语言平面(Basic Multilingual Plane, BMP),或称第零平面(Plane 0),其他平面称为辅助平面(Supplementary Planes)。基本多语言平面内,从U+D800到U+DFFF之间的码位区段是永久保留不映射到Unicode字符。UTF-16就利用保留下来的0xD800-0xDFFF区块的码位来对辅助平面的字符的码位进行编码。

  UTF-16是可变长度的,最少为两个字节(大部分字符2字节即可表示)。java中计算UTF-16编码的字符串长度,需要注意BOM(Byte Order Mark)的问题,如果未指定BOM,需要额外加上两字节长度表明BOM。示例如下:  

String s1="a";
String s2="b";
String s3="c";
String s4="abc";

System.out.println(s1.getBytes("UTF-16").length);//4
System.out.println(s2.getBytes("UTF-16").length);//4
System.out.println(s3.getBytes("UTF-16").length);//4
System.out.println(s4.getBytes("UTF-16").length);//8
原创文章 2 获赞 1 访问量 104

猜你喜欢

转载自blog.csdn.net/csdn_idiot/article/details/106094978