字符编码

字符编码

GB2312

GB2312编码收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

GB2312编码是双字节码,也是区位码(第一个字节为高字节,对应94个区;第二个字节为低字节,对应94个位,区位码范围为0101-9494,转换为十六进制为0101-5E5E),理论上可以表示94x94=8836个字符,但是实际上并没有这么多,其中:

  • 01-09区: 除汉字外的682个字符(9x94-682个字位未使用)
  • 10-15区:空白区未使用
  • 16-87区:汉字区,共6763个汉字(22x94-6763=5个位为空,在一级汉字55区,如下图1)
  • 88-94区:未使用

这里写图片描述
图1

我们可以将GB2312的区位码转化为十六进制编码,先将区位转化为十六进制,然后分别加上A0(为了兼容ASCII编码,个人猜测)即可。如汉字的区位范围为1601-8794,转化为十六进制即为0x1001-0x575E,加上A0A0后即为0xB0A1-F7FE。

GBK

GBK编码也是双字节码,由于GB2312表示的汉字只有6763个,有时候不能满足 要求,因此我们扩展了GB2312编码,即GBK编码(K即为扩展的意思,表示GBK编码是对GB2312编码的扩展),其编码范围为0x8140-0xFEFE,这个范围内可以表示的码位为0xFEFE-0x8140+1=0x7DBF=32191(10进制),但是实际上由于剔除了xx7F码位,和一些别的未使用的码位,这样,实际上只有23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。其码位如下:

0x8140 - 0x8FFE(剔除0xXX7F)
0x9040 - 0x9FFE(剔除0xXX7F)
0xA040 - 0xAFFE(剔除0xXX7F)
0xB040 - 0xBFFE(剔除0xXX7F)
0xC040 - 0xCFFE(剔除0xXX7F)
0xD040 - 0xDFFE(剔除0xXX7F)
0xE040 - 0xEFFE(剔除0xXX7F)
0xF040 - 0xFEFE(剔除0xXX7F)

注:上述编码中还有一些区间未定义

GBK编码是完全兼容GB2312编码的,也就是说,GBK是GB2312的严格超集,也就是说,GB2312中的编码在GBK中的编码码位一致,同时存储的字节也是一样的,这就是为什么采用GBK解析GB2312编码的文本不会出现乱码的原因,但是反过来不行,因为GBK的码位多于GB2312的码位。

GB18030

GB18030是单字节、双字节和四字节编码,GB18030有两个版本,GB18030-2000和GB18030-2005,GB18030-2000是GBK的取代版本,它的主要特点是在GBK基础上增加了CJK统一汉字扩充A的汉字.GB18030-2005的主要特点是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。

GB2312,GBK,GB18030都是兼容ASCII编码的,是因为他们的编码范围君跳过了ASCII的编码范围,因此,当计算机读取对应的字节时,GB2312,GBK,GB18030的非ASCII部分高位为1,而ASCII高位部分为0,这样便知道读取相应个数的字节了。

Unicode

Unicode使用一个确定的名字和一个叫做码位(code point)的整数来定义一个字符。

Unicode的码空间从U+0000到U+10FFFF,共有1,112,064个码位(code point)可用来映射字符. Unicode的码空间可以划分为17(即最高位–第三个字节从00-10)个平面(plane),每个平面包含216(65,536)个码位。每个平面的码位可表示为从U+xx0000到U+xxFFFF, 其中xx表示十六进制值从0016 到1016,共计17个平面。

第一个Unicode平面(码位从U+0000至U+FFFF)包含了最常用的字符,该平面被称为基本多语言平面(Basic Multilingual Plane),缩写为BMP。其他平面称为辅助平面(Supplementary Planes)。

其实现Unicode的UTF-8编码形式如下图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值