代码点与代码单元详解;ASCII, unicode, utf-8等编码详解

https://github.com/acmerfight/insight_python/blob/master/Unicode_and_Character_Sets.md

总结

1. 简单字符集

ascii是简单字符集,7bit表示;简单字符集的特点是定义了这个字符集包含什么字符,**同时把每个字符如何对应成计算机里的比特也进行了定义。**例如 ASCII,在 ASCII 里直接定义了 A -> 0100 0001。

2.现代编码模型

在现代编码模型里要知道一个字符如何映射成计算机里比特,需要经过如下几个步骤:
知道一个系统需要支持哪些字符,这些字符的集合被称为字符表(Character repertoire)

给字符表里的抽象字符编上一个数字,也就是字符集合到一个整数集合的映射。这种映射称为编码字符集(CCS:Coded Character Set), unicode 是属于这一层的概念unicode 跟计算机里的什么进制啊没有任何关系,它是完全数学的抽象的。

将 CCS 里字符对应的整数**转换成有限长度的比特值,**便于以后计算机使用一定长度的二进制形式表示该整数。这个对应关系被称为字符编码表(CEF:Character Encoding Form)UTF-8, UTF-16 都属于这层。

另外:UTF-8是完全兼容原来的Ascii的,就是说UTF-8的0-127就是ASCII字符集的编码。 UTF-16最少也会用2 Byte来表示一个字符,因此没有办法兼容ASCII编码(ASCII编码使用1 Byte来进行存储)。

3.Java中的码点与代码单元

码点:指的是CCS中的每个字符映射到的一个数字。
代码单元:CEF中比特组合的I基本单元。对于UTF-8来说,代码单元是8比特长;对于UTF-16来说,代码单元是16比特长。换一种说法就是UTF-8的是以一个字节为最小单位的,UTF-16是以两个字节为最小单位的。

对应关系:以utf-16为例,一个代码单元为2两字节,最多表示64k个字符,但是Unicode是包含了世界上所有语言的字符,远远大于64k个,这时候就出现了一个字符对应一个码点,而一个码点可能对应一个或两个(utf-16)代码单元的情况。

utf-8,utf-16编码详解

4.Java中的建议

建议统一使用码点,因为一个字符肯定是对应一个码点的,但可能对应两个代码单元。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值