关于汉字编码的一些简单认识

汉字编码

该篇内容和图片出自B站的BV1gZ4y1x7p7,这位作者讲得很好,希望大家能够去看看,能够对汉字编码有浅显的认知。
知乎:https://zhuanlan.zhihu.com/p/27120673,我也从这个知乎链接了解到一些汉字编码的内容。
这篇文章作为我的笔记,补充了一些其它东西。

1. ASCII码

可以是表示128个字符,0XXXXXXX中使用7位,后来还是不够,8位全用上,称为扩展ASCII码,可以表示255个字符。

2. GB2312字符集

对于中文来说,ASCII码太少了,需要别的编码方式。

如何编码?

需要先设计字符集:

在这里插入图片描述

对于01-09区:

在这里插入图片描述

03是区号,8和9是在区内的位置

对于16-55区:

在这里插入图片描述

对于56-87区:

在这里插入图片描述

这样我们就有了每个字符的码位,如何存储在电脑上?

在这里插入图片描述

在GB2312这个字符集里面,每个中文字都是两个字节,第一个字节存储区号,后面一个字节存储在区内的位置,两个字节确定了在字符集中的位置。至于为什么要加上0xA0(127),是为了和ASCII码区别开来,当计算机看到字节是小于127的,就认为是ASCII码字符。

补充:区位码、国标码、机内码是什么

在这里插入图片描述

后面又继续衍生出GBK,新增了将近20000个汉字和符号,为什么能加了这么多,因为不再规定第二个字节(低位)大于127,需要第一个字节(高位)大于127即可。

之后出现GB18030,新增了几千个少数名族字符。

输入编码和字型码:

字型码如图所见,用来输出,汉字内码会转化成为字型码

在这里插入图片描述

输入编码:

输入编码是把26个字母通汉字建立起关系,如“内”,输入nei2,拼音输入法会把nei2转化为国标码,再由系统转化为对应的汉字内码,输入编码是符合人类习惯的。

2.Unicoude字符集

​ 统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

起先的方案UCS-2字符集:

在这里插入图片描述

还是不够,于是又有了UCS-4字符集

在这里插入图片描述

3. UTF-8编码方式

​ UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部分修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

UTF-8将UCS-4字符集的码位划分为了4个区间

在这里插入图片描述

UTF-8使用1~4字节为每个字符编码:

  • 一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。

  • 带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。

  • 其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。

  • 其他极少使用的语言字符使用4字节编码。

一个例子:

在这里插入图片描述

王在Unicoude的编码是0x0000 738B

0x0000 738B 落在第三个范围,使用三个字节编码,最终编码成为0xe7 0x8e 0x8b。

如果文本中出现这个0xe7 0x8e 0x8b,同样利用UTF-8编码方式解码,反解回0x0000 738B,到Unicoude中找到“王”

对于Unicode和UTF-8,个人的见解是,Unicoude是一张表,表内每个字符都有唯一编号,UTF-8是编号的映射,对于每个Unicoude编码,UTF-8将Unicoude编码映射成为另外一个UTF-8编码,这个UTF-8编码也可以被解码为原来的Unicode编码。

为什么要这么做呢?我目前看到的好处是节省了空间,但是不如GBK字符集节省空间,只需要2个字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值