再谈Java的char和code-point

风之子赛拉飞尔 2015-11-10 06:02:55
算是一个基础语法问题了,不过在网上没有找到说得比较精准的资料。
这里把自己的研究结果分享一下,与大家共勉

char
与C/C++不同,Java中的char类型是双字节(16位)的,也就是说不管是半角字符还是全角字符都可以
用一个char表示
。所以通常情况下,可以放心的使用String类的以char为单位的任何方法,完全没有问题。

code-point
中文译为“代码点”,这个概念是用于处理四字节(32位)Unicode编码的,也就是UCS-4字符集
(请参见http://bbs.csdn.net/topics/390443113#post-394385624)。如果字串中存在UCS-4字符,
那么一个此类字符对应两个char,即一个code-point对应两个char

UCS-4
引入了平面(plane)的概念,通常使用的双字节(16位)的部分被定义为“平面0”,
目前已定义的平面序号为0~2,外加一个E平面。

参考资料:
iteye技术博客:http://thoughtfly.iteye.com/blog/977495
维基百科:https://zh.wikibooks.org/wiki/Unicode/0000-0FFF
Unicode官网:http://unicode.org/charts/

实验
借助维基百科的页面,找到位于“平面2”的、编码为20001(写全了就是0x00020001)的汉字
粘贴到Word里面,看到字体自动变为“SimSun-ExtB”(宋体增补,SimSun是“宋体”的英文译法)。
执行“插入|字符|其它符号”,看到它的编码就是20001,子集是“扩展字符-平面2”。

粘贴到IDEA中看看,自动做了转换:

String s = "\uD840\uDC01";
...全文
194 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧