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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值