编码浅析 ASCII EASCII GBK系列 Uincode UTF-8/16/32

编码浅析 ASCII EASCII GBK系列 Uincode UTF-8/16/32

前言

 本文主要是简浅的谈论一下编码的一些知识和容易的误区。不进行太过深入的解析。

ASCII
 ASCII是第一个通用性质的计算机编码,于1967年发布版本,占用1个字节,采取ISO646标准,主要是拉丁文的一些字符,可以表示128个字符。
这里可能会有人有疑惑,2^8应该是256,为什么只能表示128个?
那是因为最高的7bit是用于奇偶校验位,验证数据的准确性。

EASCII
  后期人们对最高位的奇偶校验的需求性降低,于是扩展了ASCII,也就是EASCII,采取ISO8859-1-1987版的出现,扩展了128个字符,主要是拓展了计算机发展较为快速和发达的欧美地区的语言文字,一些重英字元和一些小写的希腊字母。

  以下说的兼容ASCII仅表示等于,不表示等同,因为0001H和01H表示的含义是不一样的,一个是2个字节表示,另一个是1个字节表示。其他均兼容ASCII,不一定兼容EASCII

中国的发展

GB2312
  下文中,第一个编码较为详细,一般都是后面的基础,后面的较为简略。
  GB2312,于1980年出现,一款拥有汉字编码,中国人自己设计的编码规则。一个汉字占用2byte,可以表示6763个汉字,682个其他字符,汉字又划分1,2两级。
1级汉字,收录3755个,按照拼音音序排列
2级汉字,收录3088个,按照偏旁部首/笔画排列
编码区域地址A1A1-FEFE,其中汉字占的编码区域B0A1-F1FE
一个划分94个区域,每个区域94个编码号,共94*94=8836个码

01-09区
主要是非汉字区域 682个字符
10-15区
为空白区域
16-55区
为1级汉字区域,拼音排序
56-87
为2级汉字区域,部首/笔画排序
68-94
空白区

编码规则
高byte表示区域 汉字区域码16-87对应的地址就是B0-F7
低byte表示区位码,01-94对应的就是A1-FE

例如:啊
啊是汉字的第一个编码,也就是16区的第一个,则他的编码就是
16对应B0,1对应A1,啊的编码也就是B0A1

GBK
  GBK兼容GB2312,于1995年,一家叫方正的企业设计,占2byte,共23940个编码,收录汉字21003个(包含一些日韩的汉字),图形符号883个(但是不包含所有的汉字,50多个简体汉字就暂未收录)
地址8140-FEFE,去除各个的XX7F
高:81-FE
低:40-FE

设定了用户可自定义的区域
AAA1-AFEF 564
F8A1-FEFE 658
A140-A7A0 672

GB18030
  GB18030包含了所有的汉字和少数民族字符,2000年出一版,2005年完善。
2000年版时就采取单双和四字节编码
单字节兼容ASCII,双字节兼容GBK,四字节主要用于少数民族的字符。

世界

Unicode

  随着计算机的全面发展,人们也开始想办法编一套兼容全世界的编码。1994年,一套统一的编码符就诞生了,也就是Unicode,采取了2个字节或者4个字节(不同字节采取的标准也不同)。
需要注意的是Unicode是一个字符集,而不是编码规则,所以人们又设计了一套编码规则UTF系列,去对其进行编码。一共将其分成17个平面或者叫区(0-16)

UTF-8
  UTF-8采取的是可变长度编码,编码长度范围为1-4个字节。在UTF-8中,常用的汉字编码占2个字节(BMP),不常用的占4个字节。
编码规则
一个字节的 0XXX XXXX
二个字节的 110X XXXX 10XX XXXX
三个字节的 1110 XXXX 10XX XXXX 10XX XXXX
四个字节的 1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX

UTF-16
  UTF-16的诞生主要是为了达到UTF-32,有了UTF-8为什么还会产生UTF-16?
通过观察UTF-8就可以发现编码一个优先发展计算机的编码比后面再发展起来的所占的内存资源要少,例如,一个英文字母就只需要1个字节,而一些偏僻的语言就需要4个。
UTF-16编码只有2或者4个字节的编码。
BMP的中文2个字节,非BMP的则4个。

UTF-32
  UTF-32采取的是全部是4个字节。

后记

  这也不仅仅只是一部简单的编码发展史,同样也鞭策着我们,落后只会留下更少的生存空间。
士不可以不弘毅,任重而道远。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@矛盾综合体

感觉有帮助可以点个赞哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值