赞
踩
目录
一、 通用ASCII字符集编码
ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字节, 有符号字符型数。
编码范围是0x00-0x7F(0~127)。
ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。
注:ASCII的编码范围在GBK、Unicode、UTF8中,是统一且通用的。
关系如下图:
二、 GBK
GB 2312 标准由中国国家标准总局 1980 年发布,GB 即国标,共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个。
GB 2312 兼容 ASCII 码(0 - 127),之后对任意一个图形字符都采用两个字节表示,高位字节和低位字节都大于 127。
a、区位码 区位码查询https://www.qqxiuzi.cn/bianma/quweima.php
GB 2312 字符集分成 94 个区,每区有 94 个位,分别对应第一字节和第二字节,这种表示方式也称为区位码。
比如:汉字 "中" 字的 分区编号是 54,分区内位置编号是 48,所以,"中" 字的区位码是 5448。
b、国标码
国标码 也叫 交换码,早期,为了避免不同操作系统交换文件时发生乱码现象而使用的编码(交换流程:文件->交换码->内码->文件),目前系统大都采用内码作为交换码。
ASICII 码内 0- 31 的这 32 个字符是不可显示的字符,为了避免和这些字符的码点冲突,将 分区编号和分区内位置编号都加上 32 ,把这个转换的结果称为 国标码。
比如:汉字 "中" 字分区编号是 54,分区内位置编号是 48,加上 32 之后,分区编号是 54 + 32 = 86, ,分区内位置编号是 48 + 32 = 80,所以 "中" 字 的国标码是 8680。
但国标码 和 ASICII 码还是存在一定的重复,比如 "中" 字 的国标码是 86 80,对应第一个字节是 86,第二个字节是 80,而在 ASICII 码中它们分别代表大写字母V 和 大写字母 P,无法区分它们到底是一个汉字,还是两个字母。所以引入国标码的机内码,简称 内码。
c、内码
国标码每字节最高位都为1,相当于每个字节都加上128,即以"中" 字为例,它的 国标码是 86 80,(86 + 128 = 214,80 + 128 = 208)即(0xD6 0xD0)。
目前系统传递使用的内码也即是(区位码+0xA0,区位码+0xA0)。
由于有些汉字是在GB2312标准发布之后才简化的,还有一些人名、繁体字、日语和朝鲜语中的汉字也没有包括在内,所以,在GB2312的基础上添加了这部分字符,就形成了GBK Chinese Internal Code Specification,即汉字内码扩展规范,K 为汉语拼音 Kuo Zhan(扩展)中的“扩”字的声母,于 1995 年 12 月发布的汉字编码国家标准。
和GB2312一样,GBK也是双字节编码,为了向下兼容GB2312,GBK使用了GB2312没有用到的编码区域。总的编码范围是:第一个字节0x81–0xFE,第二个字节0x40–0xFE(0x7F除外)。
详见 -> GBK编码表https://www.toolhelper.cn/Encoding/GBK
GB 18030,国家标准 GB 18030-2005,是中国目前最新的内码字集,于 2000 年 3 月发布的汉字编码国家标准,与 GB 2312-1980 和 GBK 兼容,共收录汉字 70244 个。
与GBK不同的是,GB 18030 编码是一二四字节变长编码:
·单字节 其值从 0 到 0x7F,与 ASCII 码兼容
·双字节 第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x40 到 0xFE(不包括 0x7F),与 GBK 标准兼容
·四字节 第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x30 到 0x39,第三个字节从 0x81 到 0xFE,第四个字节从 0x30 到 0x39。
详见->GB18030编码https://www.toolhelper.cn/Encoding/GB18030
三、 Unicode
Unicode是一种全球字符编码标准,旨在为世界上所有的文字和符号提供一个统一且唯一的编码。Unicode的目标是解决在多语言环境下不同编码系统之间的兼容性问题,促进全球信息的交换。Unicode 字符集的编码范围是 0x0000 - 0x10FFFF , 可以容纳一百多万个字符, 每个字符都有一个独一无二的编码,也即每个字符都有一个二进制数值和它对应,这里的二进制数值也叫 码点 , 比如:汉字 "中" 的 码点是 0x4E2D, 大写字母 A 的码点是 0x41。
详见->Unicode编码https://www.toolhelper.cn/Encoding/Unicode 在线Unicode编码字符查看
https://www.lddgo.net/string/unicode-chart
四、UTF8
UTF-8: 是一种变长字符编码,被定义为将码点编码为 1 至 4 个字节,具体取决于码点数值中有效二进制位的数量。
UTF-8 的编码规则:
·单字节 字节的第一位设为 0,后面 7 位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的, 所以 UTF-8 能兼容 ASCII 编码,这也是互联网普遍采用 UTF-8 的原因之一。
·多字节 第一个字节的前 n 位都设为 1,第 n + 1 位设为 0,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
“中”字的Unicode编码 | |||||
0x4E2D | |||||
| | |||||
0100 | 111000 | 101101 | |||
| | | | | | |||
1110 | xxxx | 10 | xxxxxx | 10 | xxxxxx |
| | | | | | |||
1110 | 0100 | 10 | 111000 | 10 | 101101 |
| | |||||
“中”字的UTF8编码 | |||||
0xE4B8AD | |||||
| | |||||
11100100 | 10111000 | 10101101 |
例如文字转换过程:
就是将Unicode的两字节编码,按照如图所示拆分成三部分,然后每部分依次填入UTF8的对应填充字节后面,最后组合成为UTF8的三字节编码。
反之,即将UTF8编码对应的字节bit位选出,然后组合成Unicode编码。
详细见->UTF8、UTF16、UTF32https://zhuanlan.zhihu.com/p/427488961
GBK 与UTF8之间进行转换,首先便要先转换为Unicode,所以过程可以理解为:GBK -> Unicode -> UTF8,UTF8 -> Unicode -> GBK。目前 GBK与Unicode之间的相互转换都是通过查表法,就相当于要存入一个字库。
GBK与Uincode的码表:[金山文档] GBK码位与Unicode的映射.xlshttps://kdocs.cn/l/ckUzGN0FbgNO
GBK与UTF8的码表:[金山文档] UTF8_GBK.chttps://kdocs.cn/l/cuaFgkTqS55r
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。