前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java的String类中提到的代码点,代码单元到底是什么?

Java的String类中提到的代码点,代码单元到底是什么?

作者头像
JavaEdge
发布2021-02-22 14:23:46
2320
发布2021-02-22 14:23:46
举报
文章被收录于专栏:JavaEdgeJavaEdge

unicode

unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等。计算机采用八比特一个字节,一个字节最大整数是255,还要表示中文一个字也是不够的,至少需要两个字节,为了统一所有的文字编码,unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码,通常用两个字节表示一个字符,所以unicode每个平面可以组合出65535种不同的字符,一共17个平面。

由于英文符号只需要用到低8位,所以其高8位永远是0,因此保存英文文本时会多浪费一倍的空间。

比如汉子“汉”的unicode,在java中输出

System.out.println("\u5B57");

UTF-8

unicode在计算机中如何存储呢,就是用unicode字符集转换格式,即我们常见的UTF-8、UTF-16等。

UTF-8就是以字节为单位对unicode进行编码,对不同范围的字符使用不同长度的编码。

Unicode Utf-8

000000-00007F 0xxxxxxx 000080-0007FF 110xxxxx 10xxxxxx 000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx 010000-10FFFF 11110xxx10xxxxxx10xxxxxx10xxxxxx Java中的String对象就是一个unicode编码的字符串。

java中想知道一个字符的unicode编码我们可以通过Integer.toHexString()方法

代码语言:javascript
复制
    String str = "编";
    StringBuffer sb = new StringBuffer();
    char [] source_char = str.toCharArray();
    String unicode = null;
    for (int i=0;i

对应的utf-8编码是什么呢?

7f16在0800-FFFF之间,所以要用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。 7f16写成二进制是:0111 1111 0001 0110 按三字节模板分段方法分为0111 111100 010110,代替模板中的x,得到11100111 10111100 10010110,即“编”对应的utf-8的编码是e7 bc 96,占3个字节

codepoint

unicode的范围从000000 - 10FFFF,char的范围只能是在\u0000到\uffff,也就是标准的 2 字节形式通常称作 UCS-2,在Java中,char类型用UTF-16编码描述一个代码单元,但unicode大于0x10000的部分如何用char表示呢,比如一些emoji:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • unicode
  • UTF-8
  • Unicode Utf-8
  • codepoint
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档