代码点(code point)和代码单元(code units)
2024-08-30 09:52:35
1. 解释一
char:Java中,char类型为16个二进制位,原本用于表示一个字符。但后来发现,16位已经不够表示所有的字符,所以后来发展出了代码点表示字符的方法。
代码点(code point):是指编码字符集中,字符所对应的数字。有效范围从U+0000到U+10FFFF。其中U+0000到U+FFFF为基本字符,U+10000到U+10FFFF为增补字符。
代码单元(code unit):对代码点进行编码得到的1或2个16位序列。其中基本字符的代码点直接用一个相同值的代码单元表示,增补字符的代码点用两个代码单元的进行编码,这个范围内没有数字用于表示字符,因此程序可以识别出当前字符是单单元的基本字符,还是双单元的增补字符。
以上摘自漂洋过海来看你的博客。
2. 解释二
《Java核心技术 卷1》中这样描述:
代码点(code point)是指与一个编码表中的某个字符对应的代码值。UTF-16编码采用不同长度的编码表示所有Unicode代码点,每个16位二进制表示一个代码单元(code unit)。基本字符的范围为[U+0000~U+FFFF],辅助字符,即上面提到的增补字符,其两个代码单元的范围分别为[U+D800~U+DBFF]和[U+DC00~U+DFFF]。这样很容易就能知道一个代码单元是一个基本字符的编码还是一个辅助字符的第一或第二部分。
3. 解释三
Java中String.length()方法返回的是代码单元(code unit)的个数,而String.codePointCount(0, length)返回的是码点(code point)个数,即字符的个数。当然,通常这两个值是一致的。
System.out.println("---------------我是分割线-----------------");
String sentence = "\u0041 \u0042"; // 该字符串的第二个(从一开始计)字符是空格
System.out.println(sentence);
int lengthU = sentence.length();
int lengthP = sentence.codePointCount(0, lengthU);
System.out.println(lengthU); // 3个code units
System.out.println(lengthP); // 3个code points
如图所示:
System.out.println("---------------我是分割线-----------------");
String sentence = "\u03C0 \uD835\uDD6B"; // 该字符串的第二个(从一开始计)字符是空格
System.out.println(sentence);
int lengthU = sentence.length();
int lengthP = sentence.codePointCount(0, lengthU);
System.out.println(lengthU); // 4个code units
System.out.println(lengthP); // 3个code points
如图所示:
* 以上是小灰个人的理解,如有错误,欢迎指正。
最新文章
- Oracle Connect by与递归with
- JS高程3.基本概念(3)
- [[iso教程]] 《4个月ios实体教程》全网最新、最全ios视频教程
- SMS模型格网转换为MIKE21的格网源代码
- 各种边框样式。。本以为border不是这么用的。
- http和数据库sql分析与窃听技术
- SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】
- 看es6 字符串新方法有感
- CentOS下安装gcc和gdb
- PHP安全编程:主机文件目录浏览(转)
- C++类继承中的构造函数和析构函数 调用顺序
- hdu 5391 (数论)
- mybatis 增加热加载xml
- vi编辑器常用操作
- 总结vue中父向子,子向父以及兄弟之间通信的几种方式
- Android官方开发文档Training系列课程中文版:性能优化建议
- SQL中的全局变量和局部变量(@@/@)
- 电脑同时安装Python2和Python3以及virtualenvwrapper(转)
- PhoneGap开发的android项目环境搭建简单流程
- python 获取有关访问者的浏览器的 细节