计算机字符编码

计算机字符编码

1. 计算机存储和编码概念

1.1存储

我们知道数据在内存中的存储是二进制形式存储,这是因为电子元器件2种状态对应二进制的0和1也是计算机最小存储单位Bit;我们需要表示更多的状态的时候,比如8个元器件有256 种不同的组合可以表示256种状态也是我们比较常用的单位字节(Byte)

1.2编码概念

我们经常在二战谍战篇看到发电报,然后通过译码本进行电报翻译其实本质上讲这个过程其实和编码类似; 电报内容传输的就是类似01的组合, 译码本就是编码字典; 翻译后的电报则是我们看到的字符.

电脑上存文本内容你好世界!需要先查编码字典每个字符的01数字编码是多少然后才能存储;

  • 存数据: 字符文本 -->字典(编码)-->一串01组合(机器存储的内容)
  • 读数据: 01组合 --> 字典(编码) --> 字符文本

比如针对你好世界!我给出utf-8编码(一种编码字典,后续会介绍)字典如下:

字符 Unicode 编码 UTF-8 16进制 UTF-8 编码 2进制
U+4F60 E4BDA0 11100100 10111101 10100000
U+597D E5A5BD 11100101 10100101 10111101
U+4E16 E4B896 11100100 10111000 10010110
U+754C E7958C 11100111 10010101 10001100
U+0021 21 00100001

通过上面编码字典我们可以知道你好世界!在计算机内存里面存储为

11100100 10111101 10100000 
11100101 10100101 10111101 
11100100 10111000 10010110 
11100111 10010101 10001100 
00100001

如果我们在其他设备上读取上面的01组合; 我们也需要知道上面的字典,才能把这串01组合翻译为字符你好世界!

1.3计算机与编码

有了编码概念后, 我们先忘掉utf-8编码从头开始思考,首先我们要对什么内容进行编码, 怎么编码(编码的规则)一般我们做事都会根据所处的环境而决定, 计算机编码也和编码的人和计算机发展相关.

早期的差分机和解析机就不说了,计算机发展时间大概是1946年第一台电子计算机; 20世纪50年代末至60年晶体管和集成电路的发明极大地促进了计算机的小型化和性能提升; 20世纪70年代末至80年代初,个人计算机开始普及;20世纪90年代,互联网开始普及;字符编码随着计算机发展也产生了上百种编码,大部分都被淘汰了;电子计算机发源于美国且计算机开始的时候内存很小,编码也就自然希望小一些以便节省存储空间;美国考虑只需要考虑26个字母和数字以及部分符号基本上1个字节(可以编256种)就够用了;中文有几万个字符1个字符完全不够用;但是全世界通过互联网沟通就需要一套统一的编码否则无法进行沟通.

为了方便理解我们重点介绍ASCII编码Unicode编码UTF-8编码;以及中文编码GB2312、GBK、GB18030

2. ASCII编码

2.1 ASCII出现前

ASCII 编码出来前编码比较混乱, 比如早期的二进制十进制编码(Binary-Coded Decimal, BCD)有很多; 后来1963左右IBM提出EBCDIC字符编码在IBM大型机应用广泛,最多256个不同的字符,但是字符顺序并不连续后来随着ASCII的普及而被替代。

2.2 ASCII 编码

ASCII 是“American Standard Code for Information Interchange”的缩写即“美国信息交换标准代码”。美国信息交换标准代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,是一种标准的单字节字符编码方案,用于基于文本的数据。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。

ASCII 没有考虑中文和世界其他文字,ASCII 的标准版本于 1967 年第一次发布,最后一次更新则是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字、控制字符等内容是连续的,使用比较方便,后续字符编码基本都兼容ASCII编码;ASCII编码使用一个字节中的7位来存储字符,第8位(最高位)用于扩展编码。标准ASCII编码包含33个控制字符(前32个和最后一个del)和95个可打印字符。控制字符主要用于控制外围设备,如打印机。因为只有128字符比较简单我们常看的编码表如下图:

ASCLL表.png

2.3详细码表

其对应的二进制和解释如下表格:

Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写/字符 解释
0000 0000 00 0 0x00 NUL(null) 空字符
0000 0001 01 1 0x01 SOH(start of headline) 标题开始
0000 0010 02 2 0x02 STX (start of text) 正文开始
0000 0011 03 3 0x03 ETX (end of text) 正文结束
0000 0100 04 4 0x04 EOT (end of transmission) 传输结束
0000 0101 05 5 0x05 ENQ (enquiry) 请求
0000 0110 06 6 0x06 ACK (acknowledge) 收到通知
0000 0111 07 7 0x07 BEL (bell) 响铃
0000 1000 010 8 0x08 BS (backspace) 退格
0000 1001 011 9 0x09 HT (horizontal tab) 水平制表符
0000 1010 012 10 0x0A LF (NL line feed, new line) 换行键
0000 1011 013 11 0x0B VT (vertical tab) 垂直制表符
0000 1100 014 12 0x0C FF (NP form feed, new page) 换页键
0000 1101 015 13 0x0D CR (carriage return) 回车键
0000 1110 016 14 0x0E SO (shift out) 不用切换
0000 1111 017 15 0x0F SI (shift in) 启用切换
0001 0000 020 16 0x10 DLE (data link escape) 数据链路转义
0001 0001 021 17 0x11 DC1 (device control 1) 设备控制1
0001 0010 022 18 0x12 DC2 (device control 2) 设备控制2
0001 0011 023 19 0x13 DC3 (device control 3) 设备控制3
0001 0100 024 20 0x14 DC4 (device control 4) 设备控制4
0001 0101 025 21 0x15 NAK (negative acknowledge) 拒绝接收
0001 0110 026 22 0x16 SYN (synchronous idle) 同步空闲
0001 0111 027 23 0x17 ETB (end of trans. block) 结束传输块
0001 1000 030 24 0x18 CAN (cancel) 取消
0001 1001 031 25 0x19 EM (end of medium) 媒介结束
0001 1010 032 26 0x1A SUB (substitute) 代替
0001 1011 033 27 0x1B ESC (escape) 换码(溢出)
0001 1100 034 28 0x1C FS (file separator) 文件分隔符
0001 1101 035 29 0x1D GS (group separator) 分组符
0001 1110 036 30 0x1E RS (record separator) 记录分隔符
0001 1111 037 31 0x1F US (unit separator) 单元分隔符
0010 0000 040 32 0x20 (space) 空格
0010 0001 041 33 0x21 ! 叹号
0010 0010 042 34 0x22 " 双引号
0010 0011 043 35 0x23 # 井号
0010 0100 044 36 0x24 $ 美元符
0010 0101 045 37 0x25 % 百分号
0010 0110 046 38 0x26 & 和号
0010 0111 047 39 0x27 ' 单引号
0010 1000 050 40 0x28 ( 开括号
0010 1001 051 41 0x29 ) 闭括号
0010 1010 052 42 0x2A * 星号
0010 1011 053 43 0x2B + 加号
0010 1100 054 44 0x2C , 逗号
0010 1101 055 45 0x2D - 减号/破折号
0010 1110 056 46 0x2E . 句号
0010 1111 057 47 0x2F / 斜杠
0011 0000 060 48 0x30 0 字符0
0011 0001 061 49 0x31 1 字符1
0011 0010 062 50 0x32 2 字符2
0011 0011 063 51 0x33 3 字符3
0011 0100 064 52 0x34 4 字符4
0011 0101 065 53 0x35 5 字符5
0011 0110 066 54 0x36 6 字符6
0011 0111 067 55 0x37 7 字符7
0011 1000 070 56 0x38 8 字符8
0011 1001 071 57 0x39 9 字符9
0011 1010 072 58 0x3A : 冒号
0011 1011 073 59 0x3B ; 分号
0011 1100 074 60 0x3C < 小于
0011 1101 075 61 0x3D = 等号
0011 1110 076 62 0x3E > 大于
0011 1111 077 63 0x3F ? 问号
0100 0000 0100 64 0x40 @ 电子邮件符号
0100 0001 0101 65 0x41 A 大写字母A
0100 0010 0102 66 0x42 B 大写字母B
0100 0011 0103 67 0x43 C 大写字母C
0100 0100 0104 68 0x44 D 大写字母D
0100 0101 0105 69 0x45 E 大写字母E
0100 0110 0106 70 0x46 F 大写字母F
0100 0111 0107 71 0x47 G 大写字母G
0100 1000 0110 72 0x48 H 大写字母H
0100 1001 0111 73 0x49 I 大写字母I
01001010 0112 74 0x4A J 大写字母J
0100 1011 0113 75 0x4B K 大写字母K
0100 1100 0114 76 0x4C L 大写字母L
0100 1101 0115 77 0x4D M 大写字母M
0100 1110 0116 78 0x4E N 大写字母N
0100 1111 0117 79 0x4F O 大写字母O
0101 0000 0120 80 0x50 P 大写字母P
0101 0001 0121 81 0x51 Q 大写字母Q
0101 0010 0122 82 0x52 R 大写字母R
0101 0011 0123 83 0x53 S 大写字母S
0101 0100 0124 84 0x54 T 大写字母T
0101 0101 0125 85 0x55 U 大写字母U
0101 0110 0126 86 0x56 V 大写字母V
0101 0111 0127 87 0x57 W 大写字母W
0101 1000 0130 88 0x58 X 大写字母X
0101 1001 0131 89 0x59 Y 大写字母Y
0101 1010 0132 90 0x5A Z 大写字母Z
0101 1011 0133 91 0x5B [ 开方括号
0101 1100 0134 92 0x5C \ 反斜杠
0101 1101 0135 93 0x5D ] 闭方括号
0101 1110 0136 94 0x5E ^ 脱字符
0101 1111 0137 95 0x5F _ 下划线
0110 0000 0140 96 0x60 ` 开单引号
0110 0001 0141 97 0x61 a 小写字母a
0110 0010 0142 98 0x62 b 小写字母b
0110 0011 0143 99 0x63 c 小写字母c
0110 0100 0144 100 0x64 d 小写字母d
0110 0101 0145 101 0x65 e 小写字母e
0110 0110 0146 102 0x66 f 小写字母f
0110 0111 0147 103 0x67 g 小写字母g
0110 1000 0150 104 0x68 h 小写字母h
0110 1001 0151 105 0x69 i 小写字母i
0110 1010 0152 106 0x6A j 小写字母j
0110 1011 0153 107 0x6B k 小写字母k
0110 1100 0154 108 0x6C l 小写字母l
0110 1101 0155 109 0x6D m 小写字母m
0110 1110 0156 110 0x6E n 小写字母n
0110 1111 0157 111 0x6F o 小写字母o
0111 0000 0160 112 0x70 p 小写字母p
0111 0001 0161 113 0x71 q 小写字母q
0111 0010 0162 114 0x72 r 小写字母r
0111 0011 0163 115 0x73 s 小写字母s
0111 0100 0164 116 0x74 t 小写字母t
0111 0101 0165 117 0x75 u 小写字母u
0111 0110 0166 118 0x76 v 小写字母v
0111 0111 0167 119 0x77 w 小写字母w
0111 1000 0170 120 0x78 x 小写字母x
0111 1001 0171 121 0x79 y 小写字母y
0111 1010 0172 122 0x7A z 小写字母z
0111 1011 0173 123 0x7B { 开花括号
0111 1100 0174 124 0x7C | 垂线
0111 1101 0175 125 0x7D } 闭花括号
0111 1110 0176 126 0x7E ~ 波浪号
0111 1111 0177 127 0x7F DEL (delete) 删除

几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48

3. 汉字编码

3.1 主要汉字编码

由于ASCII码发布于1967比较早且才128个字符; 在1970年-1980年随着PC的兴起ASCII码也普及在美国成为了计算机通信和信息交换的标准; 随着计算机发展国际间的通信需求增加1980年代 到 1990年代在全球普及。我国发布汉字编码的时候就对ASCII码进行兼容。我国对汉字编码主要编码如下:

编码标准 发布时间 编码字符数量 特点
GB2312-80 1980年 7445 双字节编码,主要用于中国大陆简体中文编码。
收录了常用汉字和部分图形符号。
BIG5 1984年 13461 双字节编码,主要用于台湾地区繁体中文编码。
收录了较多的繁体汉字和一些特定符号。
GB13000.1-93 1993年 收录了ISO/IEC 10646 基于ISO/IEC 10646的中国国家标准版本,使用UCS-4编码方式(每个字符占用4个字节)
支持多种语言文字,与Unicode高度兼容。
GB13000-2010 2010年 收录了ISO/IEC 10646 更新版的GB13000,支持多种语言文字,与Unicode高度兼容。
GBK 1995年 汉字:21003个 双字节编码,向下兼容GB2312,支持更多汉字和符号。
GB18030-2000 2000年 汉字:27484个 向下兼容GB2312和GBK,支持更多汉字和少数民族文字。
GB18030-2005 2005年 汉字:27484个 GB18030-2000的修订版,增加了对更多少数民族文字的支持。
GB18030-2022 2022年 汉字:70244个 最新版GB18030,进一步扩展了字符集,增加了对更多少数民族文字的支持。

各个编码详细如下

3.2 GB2312-80 标准: 1980年国标(GB) 7445 个字符 汉字6763字

从1975年开始,我国为了研究汉字的使用频度,进行了大规模的字频统计工作,在数以亿计的浩瀚文献资料中,统计出不同的汉字数为6335个,其中3000多字的累计使用频度达到99.9%,而另外的3000多字累计频 度不到0.1%,说明了常用汉字与次常用汉字的数量合起来不足7000个,这就为国家制定汉字库标准提供了依据。

1980年,国家标准总局颁布了国家汉字信息交换用编码,全称《信息交换用汉字编码字符集基本集》,国家标准号为:GB2312-80,自1981年5月1日起实施,准号是GB/T 2312-1980通行于大陆。新加坡等地也使用此编码。

GB2312-80 共收录 7445 个字符,汉字 6763 个,非汉字字符682个。682个非汉字字符,包含有数字、一般符号、拉丁字母、日本假名、希腊字母、俄文字母、拼音符号、注音字母等。GB2312 兼容标准 ASCII码,采用扩展 ASCII 码的编码空间进行编码,一个汉字占用两个字节,每个字节的最高位为 1。每个字节均采用七位编码表示”我们习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节。组成 9494 的方阵收集了 7445 个字符。 每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为“区位码”。区位输入法就是通过输入区位码实现汉字输入的。94个区中01-09区为符号、数字区:16-87区为汉字区:10-15区、88-94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字,计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字,计3008个*,置于56-87区,按部首/笔画顺序排列。将区号和位号分别加上 20H,得到的 4 位十六进制整数称为国标码,编码范围为 0x2121~0x7E7E。为了兼容标准 ASCII 码,给国标码的每个字节加 80H,形成的编码称为机内码,简称内码,是汉字在机器中实际的存储代码GB2312-80 标准的内码范围是 0xA1A1~0xFEFE 。

01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码。

GB-2312的实施,保证和满足了一般汉字处理技术的基本要求,从而奠定了中文信息处理的基础。它对于初创阶段电脑中文的应用和发展,功不可没。但在后续的发展过程中显露出了一些局限性,尤其是在字符集大小、字符类型支持以及扩展性方面。主要问题如下:

  1. 字符集有限:
    • GB2312-80只包含了6763个常用汉字和682个图形符号,对于一些较生僻的汉字或者特殊符号支持不足。
    • 随着计算机应用的广泛普及和中文信息处理的需求增加,这种限制显得越来越明显。
  2. 不支持繁体字:
    • GB2312-80主要针对的是简体汉字,而不支持繁体字。这在一定程度上限制了与使用繁体字地区的交流。
  3. 编码空间利用率不高:
    • GB2312-80采用双字节编码,但是编码空间的分配并不是十分高效,存在一定的浪费。
  4. 扩展性较差:
    • 由于GB2312-80的设计较为固定,难以方便地添加新的字符或符号。
  5. 跨平台兼容性问题:
    • 在不同操作系统和应用程序之间传输GB2312-80编码的文本时,可能会出现乱码等问题。

上面描述的的扩展和兼容问题可能不方便理解, 其实主要是因为标准本身的灵活性和历史原因导致的不同解释, GB2312本身定义了一个标准的字符集,但是并没有严格限制扩展的可能性; 我们现在知道汉字有几万个7445 个字符是不够用的, 那么就需要根据这个标准对字符集之外的内容进行拓展, 在GB2312的基础上添加额外的汉字或符号,以满足特定领域的需求。 这些扩展可能由不同的组织或个人完成,因此可能会有不同的扩展字符集和编码位置。

对于拓展部分 有两种不同的GB2312实现,在它们之间存在少量的差别,其中至少有一个是错误的。这样就造成了错误,新的编码更加规范的编码就迫切需要了。

字节序 实现A 实现B
A1A4 U+00B7 MIDDLE DOT U+30FB KATAKANA MIDDLE DOT
A1AA U+2014 EM DASH U+2015 HORIZONTAL BAR

实现A与GBK/GB18030兼容,实现B则不兼容。在2015年, 微软.Net Framework在使用实现A。 iconv-1.14, php-5.6, ActivePerl-5.20, Java 1.7, Python 3.4在使用实现B。

3.3 Big5(大五码/五大码):13461字符, 13,060个汉字

前面说了GB2312不支持繁体中文那么我国的港奥台地区则需要一个能编码繁体字的编码; BIG5是由台湾财团法人资讯工业策进会(CSTNIC)和五家资讯公司共同创立的。这五家公司分别是:宏碁、神通、佳佳、零壹及大众(大众电脑股份有限公司和德国大众没关系哈_)。BIG5是CSTNIC为五大中文套装软件所设计的中文共通内码,在1983年12月完成公告,隔年(1984年)3月,信息产业策进会与台湾13家厂商签定“16位个人电脑套装软件合作开发(BIG-5)项目(五大中文套装软件)”,因为此中文内码是为台湾自行制作开发之“五大中文套装软件”所设计的,所以就称为Big5中文内码。

Big5码是一套双字节字符集,使用了双八码存储方法,以两个字节来安放一个字。共收录了大约13,053个汉字和字符,其中包括一些重复编码的字符。常用字5401个,包括台湾教育部颁布的《常用国字标准字体表》的全部汉字4808个,台湾教科书常用字587个,异体字6个。次常用字7652个,包括台湾教育部颁布的《次常用国字标准字体表》的全部汉字6341个《罕用国字标准字体表》中使用频率较高的字1311个。

编码范围为0x8140-0xFE7E和0x81A1-0xFEFE。

  • 其中0xA140-0xA17E和0xA1A1-0xA1FE是图形符号区域。
  • 0xA440-0xF97E和0xA4A1-0xF9FE是汉字区域。

两字节中第1个字节称为“高位字节”,第2个字节称为“低位字节”。“高位字节”使用了0x81-0xFE,“低位字节”使用了0x40-0x7E,及0xA1-0xFE。在Big5的分区中:

0x8140-0xA0FE 保留给用户自定义字符(造字区)
0xA140-0xA3BF 标点符号、希腊字母及特殊符号,包括在0xA259-0xA261,安放了九个计量用汉字:兙兛兞兝兡兣嗧瓩糎。
0xA3C0-0xA3FE 保留。此区没有开放作造字区用。
0xA440-0xC67E 常用汉字,先按笔划再按部首排序。
0xC6A1-0xC8FE 保留给用户自定义字符(造字区)
0xC940-0xF9D5 次常用汉字,亦是先按笔划再按部首排序。
0xF9D6-0xFEFE 保留给用户自定义字符(造字区)

BIG5编码是台湾地区繁体中文编码的重要里程碑,它在很长一段时间内支撑了繁体中文的信息化进程。BIG5自1984年开始使用,随着计算机技术的发展和个人电脑在台湾地区的普及,它迅速成为了台湾地区最主要的汉字编码标准。在互联网时代初期,BIG5也曾经是网络上繁体中文内容的主要编码方式之一。它通行于台湾、香港地区,是一个繁体字编码方案,虽存有一些瑕疵,但广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标 准。当然BIG5码也存在各种问题如下:

  1. 字符集有限:
    • BIG5最初收录的字符数量有限,无法覆盖所有繁体中文的需要。
    • 随着时间的推移和社会文化的发展,出现了更多新的词汇和汉字,BIG5无法很好地支持这些新增的内容。
  2. 编码空间不足:
    • BIG5的编码空间相对较小,这意味着它不能有效地扩展以包含更多的字符。
    • 这导致了一些特定的字符或符号无法在BIG5中找到合适的编码位置。
  3. 兼容性问题:
    • 由于BIG5是一种特定于繁体中文的编码标准,与其他语言或编码系统的兼容性较差。
    • 这使得在多语言环境中使用BIG5变得困难。
  4. 非标准化:
    • BIG5不是一种国际标准,这导致了在不同地区或平台之间传输文本时可能出现的问题。
    • 其他国家和地区可能不支持或理解BIG5编码的文本。
  5. 编码冲突:
    • 在BIG5中存在一些编码冲突的情况,即相同的编码可能对应不同的字符。
    • 这种冲突会导致文本处理时出现错误。

3.4 GB13000

从前面我们知道随着PC的普及和国际通讯发展,各个国家都发展各自编码;那么国家间通讯就比较麻烦了统一编码的需求就强烈产生了。大概1988年美国加州相关企业成立了付费加入的Unicode商业机构,后来这个机构成立最初的成立了Unicode组织。此外国际组织 ISO 和 IEC 经常合作制定标准,形成了ISO/IEC联合技术委员会ISO/IEC JTC 1(Joint Technical Committee 1, JTC 1)并且成立了ISO-10646工作小组。1991年统一码联盟 (Unicode Consortium)成立是个由个人、企业、学术机构和其他组织组成的 非政府组织。这个组织在1991年10月发布了不包含CJK统一汉字集的Unicode 1.0,Unicode 1.1 发布于1993年6月发布,完成了CJK统一汉字集的制定。而前面ISO-10646工作小组在1993年发布了首个版本命名为ISO/IEC 10646-1:1993。 ISO/IEC 10646-1:1993 与 Unicode 1.1 在字符编码方面非常相似,几乎完全相同 在 1991年 到 1993年 期间,Unicode 联盟与 ISO/IEC 工作组紧密合作,以确保两个标准之间的兼容性和一致性。Unicode 和 ISO/IEC 10646 的制定者们希望创建一个统一的编码方案,避免重复工作,并且使不同的软件和系统能够更好地相互通信。

在ISO/IEC 10646-1:1993 里面定义了UCS(Universal Coded Character Set,通用编码字符集)的字符编码系统,旨在为世界上所有语言的文字提供统一的编码方案。UCS我国译为《通用多八位编码字符集》,我国台湾译为《广用多八位元编码字元集》,"与Unicode编码完全兼容。

我们国家技术监督局发布了GB13000.1-93国家标准(1993年12月24日),对UCS以国家标准的形式予以认可。GB 13000.1-93 采用了 ISO/IEC 10646-1:1993 的核心内容和框架,也就是说,它在很大程度上遵循了 ISO/IEC 10646-1:1993 中定义的通用多文种平面(UCS)的字符集和编码规则。GB 13000.1-93 与 ISO/IEC 10646-1:1993 高度兼容,这意味着使用这两种标准编码的文本可以在不同系统之间互相识别和转换。从扩展角度,尽管 GB 13000.1-93 基于 ISO/IEC 10646-1:1993,但它可能还包括了一些额外的规定或调整,以满足中国国家标准的具体要求。这可能包括对某些字符的特定解释、编码实现细节的说明等。

GB 13000.1-93 是一个 16 位 的编码标准,可以表示超过 65,536 个字符。它采用了 UCS-2 的编码形式,即 16 位 的编码空间,可以表示 基本多文种平面(BMP)中的所有字符。GB 13000.1-93 支持全球多种语言的文字,包括中文在内的各种语言。GB 13000.1-93 在发布时,即 1993年,收录了大量的字符。根据 ISO/IEC 10646-1:1993 的规定,GB 13000.1-93 收录了超过 20,000 个汉字。这些汉字不仅包括了日常使用的常用汉字,还包括了一些较为罕见或专业的汉字。此外,它还包含了基本拉丁字母、希腊字母、西里尔字母、阿拉伯字母等其他语言的字符。这个标准与 ISO/IEC 10646-1:1993 和 Unicode 1.1 高度兼容,确保了全球范围内字符编码的一致性和互操作性。

3.5 GBK(GB2312-80 扩展集)

GBK(GB2312-80 扩展集)是中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订 发布的一个字符编码标准,它扩展了 GB 2312,并在一定程度上与 GB 13000.1-93 兼容。GBK 是一个 双字节 编码标准,它可以表示超过 20,000 个字符。GBK 支持基本的中文简体汉字、繁体汉字以及一些常用符号。GBK 在发布时(1995年),收录了超过 21,000 个汉字。除了汉字之外,它还包含了一些常用的符号和特殊字符。GBK 收录了超过 21,000 个汉字。这个数量比 GB 2312 显著增加,但略少于 GB 13000.1-93。

兼容性:GBK 与 GB 2312 完全兼容,这意味着所有 GB 2312 的字符在 GBK 中都有对应的编码。
扩展性:相比 GB 2312,GBK 收录了更多的汉字和符号,增加了字符集的丰富度。
跨平台支持:虽然 GBK 不是基于 ISO/IEC 10646 的标准,但由于它与 GB 13000.1-93 部分兼容,因此在一定程度上也支持跨平台使用。

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。GBK分配区域和顺序如下图:

GBK编码概览图.jpeg

全部编码分为三大部分:

  1. 汉字区。包括:
    a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。(绿色)
    b. GB 13000.1 扩充汉字区。包括:
    (1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。(蓝色)
    (2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。(深绿色)
  2. 图形符号区。包括:
    a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。(绿色)
    b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“○”排列在此区。计符号 166 个。(黄色)
  3. 用户自定义区:分为(1)(2)(3)三个小区。EUDC
    (1) AAA1-AFFE,码位 564 个。(红色)
    (2) F8A1-FEFE,码位 658 个。(红色)
    (3) A140-A7A0,码位 672 个。(红色)
    第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。

GB18030-2000(也称为GB18030或 GBK2.0 )

GB18030-2000是GB18030的第一个版,是对GBK的拓展版本。2000年3月17日信息产业部和国家质量技术监督局又发布了- 项新的中文信息处理基础性国家标准GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,它是在原来的GB231280编码标准和GBK编码标准的基础上进行扩充,增加了四字节部分的编码。它扩展了 GBK 的字符集,收录了更多的汉字,并支持更多的语言文字。支持简体中文、繁体中文、藏文、蒙文等多种语言文字。它可以完全映射ISO 10646的基本平面和所有辅助平面,共有150多万个码位。它在ISO10646的基本平面内,在原来的2万多汉字的基础上,增加了7000多个汉字的码位和字形,从而使计算机可处理的汉字数量进一步从GB13000.1的 20902个,再扩充到现在的27533个。GB18030与GB2312脉相承,较好地解决了旧系统向新系统的转换问题,而且繁简字处于同一平台。

GB18030-2000是我国继GB2312-80和GB13000-1993之后的强制性汉字编码标准是未来我国计算机系统必须遵循的基础性标准之一。它的主要目的是为了解决一些生、偏、难字的问题,以及适应出版、邮政、户政、金融、地理信息系统等迫切需 要的人名、地名用字问题,也为汉字研究、古籍整理等领域提供了统一的信息平台基础,并且为中文信息在国际互联网上的传输与交换提供了保障。该标准还同时收 录了藏、蒙、维吾尔等主要的少数民族文字,为推进少数民族的信息化奠定了坚实的基础。世界许多国家和地区从方便本国和本民族应用的角度出发,都制定了自己文字的编码标准并建立起相应的内码体系,如日本的JSX020&和JSX0212,韩国的KSC5601和KSC5657等,这是国际上的通行惯 例。我国制定GB18030同样符合国际惯例,它可以充分利用已有资源,保证不同系统间的兼容,最大限度地共享资源,为我国软件产业留有巨大的发展空间。

国家质量技术监督局宣布,GB18030(俗称GBK2.0)自2001年9月1日起替代原有的GB2312和GBK1.0,成为新的计算机汉字信息交换标准。所有信息技术产品的研制开发和生产,若不执行GB18030强制性标准,将依照国家有关规定进行惩处

18030-2005(GB18030-2000的改进版本)

2005年11月8日中国国家标准化管理委员会发布18030-2005版本,并要求2006-05-01 实施。18030-2005是对 GB 18030-2000 的更新版本,它进一步扩展了字符集,收录了更多的汉字和符号,支持更多的语言文字,并提高了与 Unicode 标准的兼容性。

字符集扩展:GB 18030-2005 收录了更多的汉字和符号,增加了字符集的丰富度。
语言支持增强:GB 18030-2005 支持更多的语言文字,包括更多少数民族语言的文字。
兼容性提升:GB 18030-2005 提高了与 Unicode 标准的兼容性,更好地支持国际化的文本处理。

GB13000-2010(与Unicode 更兼容)

2011年01月10日中国国家标准化管理委员会和中华人民共和国国家质量监督检验检疫总局发布了GB/T 13000-2010信息技术 通用多八位编码字符集(UCS),这个标准在2011-11-01开始实施。这个标准的体系结构与基本多文种平面部分是强制性的,其余为推荐性的。同时GB 13000.1-1993强制性转化为推荐性标准;

13000-2010修订对1993年版的主要变动如下:

  1. 朝鲜文及其补充从基本多文种平面的3400~4DFF移至基本多文种平面的AC00~D7FF(原0区,即第一版的保留区),空出的代码位置分配给新增的CJK统一汉字扩充A;
  2. 增加收录多种我国少数民族文字及其他文字、字符,如藏文、蒙古文、彝文等;
  3. 新增用于uTF-16的S区(代理区),代码位置是基本多文种平面的D800 DFFF(原O区,即第一版的保留区),并有专门的附录对其进行说明;
  4. 增加了辅助平面,包括00组01平面(文字和符号辅助多文种平面)、00组o2平面(辅助表意文字平面,用于CJK统一汉字扩充8和CJK兼容汉字补充)和00组0E平面(辅助特殊用途平面)。

GB 13000-2010 是基于 ISO/IEC 10646的最新版本。收录了更多的字符,支持全球多种语言的文字,包括中文在内的各种语言。目标是提供一个与国际标准 Unicode 高度兼容的字符编码方案。GB 13000-2010 收录的字符数量更多,支持更多的语言文字。与 Unicode 标准的高度兼容性意味着它可以更好地支持国际化文本处理。从体系结构与基本多文种平面部分是强制性的可以看出更侧重于全球多语言环境。GB 13000-2010 的发布是为了提供一个与 Unicode 标准高度兼容的编码方案,以支持全球多语言环境。

GB18030-2022

2022年07月19日中国国家标准化管理委员会和中华人民共和国国家质量监督检验检疫总局发布了GB 18030-2022并要求2023-08-01实施,同时18030-2005在8月1日作废。GB 18030-2022 的发布是为了满足更多语言文字的编码需求,特别是在中文环境下的多样化需求。GB 18030-2022 的优点在于它支持更多的语言文字,并提高了与 Unicode 标准的兼容性,特别是在中文环境下的多样化需求。

现行版本共收录汉字 87887 个,由包含了简体和繁体汉字,支持中国少数民族现行文字,包含了日韩等国的象形文字,还包括了 214 个康熙部首。覆盖中国绝大部分人名、地名用生僻字以及文献、科技等专业领域的用字,满足公安、地图、古籍出版等行业的应用需求。

4. 统一码

统一码联盟

这个统一码联盟和统一码听名字就是知道是为了统一不同编码而存在在, 这里就用百度百科的描述就行介绍。统一码联盟是一个致力于开发,维护,发展全球通用软件标准和数据格式,特别是维护Unicode编码标准的非牟利机构。统一码联盟制定了一种可以对全球几乎所有语言文字进行编码的标准。其宗旨为最终以统一码取代现存的字符编码。因为现存编码不能够在多语言计算机环境中使用,而且字符数有局限。同时它也制定了数种统一码转换格式(UTF,Unicode Transformation Format)。

统一码联盟大概发展历史: Unicode 项目 开始于 1988年,由几家科技公司(如 Apple、Xerox、Sun、Microsoft、NeXT 等)组成的Unicode 联盟 进行开发。Unicode组织允许任何愿意支付会费的公司和个人加入,其成员包含了主要的计算机软硬件厂商,例如奥多比系统、苹果公司、惠普、IBM、微软、施乐等。20世纪80年代末,组成Unicode组织的商业机构,和国际合作的国际标准化组织因为计算机普及和信息国际化的前提下,分别各自成立了Unicode组织和ISO-10646工作小组。他们不久便发现对方的存在,大家为着相同的目的而工作,于是两个组织便共同合作开发适用于各国语言的通用码,而且“相当有默契地”各自发表Unicode和ISO-10646字集。虽然实际上两者的字集编码相同,但实质上两者确实为两个不同的标准。目前统一码联盟由世界各地主要的电脑制造商、软件开发商、数据库开发商、政府部门、研究机构、国际机构、各用户组织及个人组成。统一码联盟的领导者及管理人员来自各个组织及行业,代表着最广泛的编码应用。

统一码(Unicode)

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

如果把各种文字编码形容为各地的方言,那么统一码就是世界各国合作开发的一种语言。在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是统一码的最大好处。就是将世界上所有的文字用2个字节统一进行编码。那样,像这样统一编码,2个字节就已经足够容纳世界上所有语言的大部分文字了。Universal Multiple-Octet Coded Character Set,简称为UCS。现在用的是UCS-2,即2个字节编码,而UCS-4是为了防止将来2个字节不够用才开发的。

Unicode编码标准1990年开始研发, 1991年首次发布,之后经历了一系列版本的更新和发展,以适应不断增长的全球化需求。下面是Unicode编码标准的主要版本及其发布时间:

  1. Unicode 1.0:1991年10月发布。
    • 这是Unicode的第一个版本,标志着Unicode标准的开始。不包含CJK统一汉字集。
  2. Unicode 1.0.1:1992年6月发布。
    • 对Unicode 1.0进行了小幅度的修订。
  3. Unicode 1.1:1993年6月发布。
    • 增加了一些新特性。完成了CJK统一汉字集的制定。
  4. Unicode 2.0:1997年7月发布。
    • 这个版本是一个重要的里程碑,它引入了更多的字符和改进的编码方案,增加了对多种语言的支持。Unicode采用了与ISO 10646-1相同的字库和字码。
  5. Unicode 2.1:1998年5月发布。
    • 对Unicode 2.0进行了修订。
  6. Unicode 2.1.2:1998年5月发布。
    • 另一次对Unicode 2.0的修订。
  7. Unicode 3.1:2001年发布。
    • 增加了CJK统一汉字扩充A(CJK Unified Ideographs Extension A),支持更多汉字。
  8. Unicode 4.1:2005年发布。
    • 增加了CJK统一汉字扩充B(CJK Unified Ideographs Extension B),进一步扩展了汉字支持。
  9. Unicode 5.1:2008年4月发布。
    • 在此版本之前,Unicode 5.1是最新的版本。
  10. Unicode 5.2.0:2009年10月1日发布。
  • 相比Unicode 5.1.0,增加了6648个字符,主要新增了数个文字区块。
  1. Unicode 13.0:2020年3月发布。

    • 这是Unicode的一个重要版本,包含了大量新字符和改进。
  2. Unicode 14.0:2021年发布,原定发布时间为2021年9月,但由于新冠疫情的影响,发布日期被推迟。

    • 这个版本增加了838个字符,包含37个Emoji表情。
  3. Unicode 15.1.0:2023年9月发布。

    • 新增了较少的表情符号,例如摇头、凤凰等。
  4. Unicode 16.0:2024年5月22开始审查。

发展历程

  • 初期:Unicode 1.0 到 Unicode 2.0 是Unicode标准发展的初期阶段,主要集中在建立基础框架和增加对主要语言的支持。
  • 成熟期:从Unicode 2.1开始,Unicode标准进入了快速发展期,增加了更多的字符和改进的编码方案。
  • 持续更新:从Unicode 5.1到Unicode 16.0,Unicode标准继续增加新的字符、表情符号和改进现有字符的描述,以适应不断变化的需求和技术进步。

编码文字范围
0000-007F:C0控制符及基本拉丁文(C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文补充-1(C1 Control and Latin 1 Supplement)
0100-017F:拉丁文扩展-A(Latin Extended-A)
0180-024F:拉丁文扩展-B(Latin Extended-B)
0250-02AF:国际音标扩展(IPA Extensions)
02B0-02FF:空白修饰字母(Spacing Modifiers)
0300-036F:结合用读音符号(Combining Diacritics Marks)
0370-03FF:希腊文及科普特文(Greek and Coptic)
0400-04FF:西里尔字母(Cyrillic)
0500-052F:西里尔字母补充(Cyrillic Supplement)
0530-058F:亚美尼亚语(Armenian)
0590-05FF:希伯来文(Hebrew)
0600-06FF:阿拉伯文(Arabic)
0700-074F:叙利亚文(Syriac)
0750-077F:阿拉伯文补充(Arabic Supplement)
0780-07BF:马尔代夫语(Thaana)
07C0-077F:西非书面语言(N'Ko)
0800-085F:阿维斯塔语及巴列维语(Avestan and Pahlavi)
0860-087F:曼达安语(Mandaic)
0880-08AF:撒马利亚语(Samaritan)
0900-097F:天城文书(Devanagari)
0980-09FF:孟加拉语(Bengali)
0A00-0A7F:古木基文(Gurmukhi)
0A80-0AFF:古吉拉特文(Gujarati)
0B00-0B7F:奥里亚文(Oriya)
0B80-0BFF:泰米尔文(Tamil)
0C00-0C7F:泰卢固文(Telugu)
0C80-0CFF:卡纳达文(Kannada)
0D00-0D7F:马拉雅拉姆语(Malayalam)
D80-0DFF:僧伽罗语(Sinhala)
0E00-0E7F:泰文(Thai)
0E80-0EFF:老挝文(Lao)
0F00-0FFF:藏文(Tibetan)
1000-109F:缅甸语(Myanmar)
10A0-10FF:格鲁吉亚语(Georgian)
1100-11FF:朝鲜文字母(Hangul Jamo)
1200-137F:埃塞俄比亚语(Ethiopic)
1380-139F:埃塞俄比亚语补充(Ethiopic Supplement)
13A0-13FF:切罗基语(Cherokee)
1400-167F:统一加拿大土著语音节(Unified Canadian Aboriginal Syllabics)
1680-169F:欧甘字母(Ogham)
16A0-16FF:如尼文(Runic)
1700-171F:塔加洛语 (Tagalog)
1720-173F:哈努诺文(Hanunóo)
1740-175F:布锡文(Buhid)
1760-177F:塔格巴努亚文(Tagbanwa)
1780-17FF:高棉语(Khmer)
1800-18AF:蒙古文(Mongolian)
18B0-18FF:鞑靼语(Cham)
1900-194F:林布文(Limbu)
1950-197F:德宏傣语(Tai Le)
1980-19DF:新傣仂语(New Tai Lue)
19E0-19FF:高棉语记号(Khmer Symbols)
1A00-1A1F:布吉文(Buginese)
1A20-1A5F:巴塔克文(Batak)
1A80-1AEF:兰纳文(Lanna/Tai Tham)
1B00-1B7F:巴厘语(Balinese)
1B80-1BB0:巽他语(Sundanese)
1BC0-1BFF:救世苗文(Pahawh Hmong)
1C00-1C4F:雷布查语(Lepcha)
1C50-1C7F:奥尔其基语字母(Ol Chiki)
1C80-1CDF:曼尼普尔语(Meithei/Manipuri)
1D00-1D7F:语音学扩展(Phonetic Extensions)
1D80-1DBF:语音学扩展补充(Phonetic Extensions Supplement)
1DC0-1DFF:结合用读音符号补充(Combining Diacritics Marks Supplement)
1E00-1EFF:拉丁文扩充附加(Latin Extended Additional)
1F00-1FFF:希腊语扩充(Greek Extended)
2000-206F:常用标点(General Punctuation)
2070-209F:上标及下标(Superscripts and Subscripts)
20A0-20CF:货币符号(Currency Symbols)
20D0-20FF:组合用记号(Combining Diacritics Marks for Symbols)
2100-214F:字母式符号(Letterlike Symbols)
2150-218F:数字形式(Number Form)
2190-21FF:箭头(Arrows)
2200-22FF:数学运算符(Mathematical Operator)
2300-23FF:杂项工业符号(Miscellaneous Technical)
2400-243F:控制图片(Control Pictures)
2440-245F:光学识别符(Optical Character Recognition)
2460-24FF:封闭式字母数字(Enclosed Alphanumerics)
2500-257F:制表符(Box Drawing)
2580-259F:方块元素(Block Element)
25A0-25FF:几何图形(Geometric Shapes)
2600-26FF:杂项符号(Miscellaneous Symbols)
2700-27BF:印刷符号(Dingbats)
27C0-27EF:杂项数学符号-A(Miscellaneous Mathematical Symbols-A)
27F0-27FF:追加箭头-A(Supplemental Arrows-A)
2800-28FF:盲文点字模型(Braille Patterns)
2900-297F:追加箭头-B(Supplemental Arrows-B)
2980-29FF:杂项数学符号-B(Miscellaneous Mathematical Symbols-B)
2A00-2AFF:追加数学运算符(Supplemental Mathematical Operator)
2B00-2BFF:杂项符号和箭头(Miscellaneous Symbols and Arrows)
2C00-2C5F:格拉哥里字母(Glagolitic)
2C60-2C7F:拉丁文扩展-C(Latin Extended-C)
2C80-2CFF:古埃及语(Coptic)
2D00-2D2F:格鲁吉亚语补充(Georgian Supplement)
2D30-2D7F:提非纳文(Tifinagh)
2D80-2DDF:埃塞俄比亚语扩展(Ethiopic Extended)
2E00-2E7F:追加标点(Supplemental Punctuation)
2E80-2EFF:CJK部首补充(CJK Radicals Supplement)
2F00-2FDF:康熙字典部首(Kangxi Radicals)
2FF0-2FFF:表意文字描述符(Ideographic Description Characters)
3000-303F:CJK符号和标点(CJK Symbols and Punctuation)
3040-309F:日文平假名(Hiragana)
30A0-30FF:日文片假名(Katakana)
3100-312F:注音字母(Bopomofo)
3130-318F:朝鲜文兼容字母(Hangul Compatibility Jamo)
3190-319F:象形字注释标志(Kanbun)
31A0-31BF:注音字母扩展(Bopomofo Extended)
31C0-31EF:CJK笔画(CJK Strokes)
31F0-31FF:日文片假名语音扩展(Katakana Phonetic Extensions)
3200-32FF:封闭式CJK文字和月份(Enclosed CJK Letters and Months)
3300-33FF:CJK兼容(CJK Compatibility)
3400-4DBF:CJK统一表意符号扩展-A(CJK Unified Ideographs Extension-A)
4DC0-4DFF:易经六十四卦符号(Yijing Hexagrams Symbols)
4E00-9FFF:CJK统一表意符号(CJK Unified Ideographs)
A000-A48F:彝文音节(Yi Syllables)
A490-A4CF:彝文字根(Yi Radicals)
A500-A61F:瓦伊语(Vai)
A660-A6FF:统一加拿大土著语音节补充(Unified Canadian Aboriginal Syllabics Supplement)
A700-A71F:声调修饰字母(Modifier Tone Letters)
A720-A7FF:拉丁文扩展-D(Latin Extended-D)
A800-A82F:锡尔赫特文字母(Syloti Nagri)
A840-A87F:八思巴字(Phags-pa)
A880-A8DF:索拉什特拉语Saurashtra
A900-A97F:爪哇语(Javanese)
A980-A9DF:查克玛语(Chakma)
AA00-AA3F:Varang Kshiti
AA40-AA6F:索拉索姆字母(Sorang Sompeng)
AA80-AADF:尼瓦尔语(Newari)
AB00-AB5F:越南傣语(Vi?t Thái)
AB80-ABA0:克耶字母(Kayah Li)
AC00-D7AF:朝鲜文音节(Hangul Syllables)
D800-DBFF:High-half zone of UTF-16
DC00-DFFF:Low-half zone of UTF-16
E000-F8FF:自行使用区域(Private Use Zone)
F900-FAFF:CJK兼容象形文字(CJK Compatibility Ideographs)
FB00-FB4F:字母表达形式(Alphabetic Presentation Form)
FB50-FDFF:阿拉伯表达形式A(Arabic Presentation Form-A)
FE00-FE0F:变量选择符(Variation Selector)
FE10-FE1F:竖排形式(Vertical Forms)
FE20-FE2F:组合用半符号(Combining Half Marks)
FE30-FE4F:CJK兼容形式(CJK Compatibility Forms)
FE50-FE6F:小型变体形式(Small Form Variants)
FE70-FEFF:阿拉伯表达形式B(Arabic Presentation Form-B)
FF00-FFEF:半型及全型形式(Halfwidth and Fullwidth Form)
FFF0-FFFF:特殊(Specials)
10000–1FFFF:第1辅助平面,多文种补充平面(Supplementary Multilingual Plane, SMP)
20000–2FFFF:第2辅助平面,表意文字补充平面(Supplementary Ideographic Plane, SIP)
30000–3FFFF:第3辅助平面,表意文字第三平面(Tertiary Ideographic Plane, TIP)
40000–DFFFF:第4-13辅助平面,尚未使用
E0000–EFFFF:第14辅助平面,特别用途补充平面(Supplementary Special-purpose Plane, SSP)
F0000–FFFFF:第15辅助平面,保留作为私人使用区(Private Use Area, PUA)
100000–10FFFF:第16辅助平面,保留作为私人使用区(Private Use Area, PUA)

UTF-8

UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容。UTF8分成单字节、双字节、三字节、四字节模式。UTF-8编码字符理论上可以最多到4个字节长,然而16位BMP字符最多只用到3字节长,Bigendian UCS-4字节串的排列顺序是预定的,字节0xFE和0xFF在UTF-8编码中从未用到。

UTF-8以字节为单位对统一码进行编码。从统一码到UTF-8的编码方式如下:

字节 格式 实际编码位 码点范围
1字节 0xxxxxxx 7 0 ~ 127
2字节 110xxxxx 10xxxxxx 11 128 ~ 2047
3字节 1110xxxx 10xxxxxx 10xxxxxx 16 2048 ~ 65535
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 21 65536 ~ 2097151

为了方便理解编码转换 utf-8编码转换工具 https://www.qqxiuzi.cn/bianma/utf-8.htm

知乎的文章 https://zhuanlan.zhihu.com/p/46216008 有个图很好的说明了 编码转化的过程, 图如下:

image.png

5. ISO/IEC 10646

我们前面经常提到了ISO/IEC 10646此次就稍微介绍一下

IEC:(International Electrotechnical Commission,国际电工委员会 ,成立于1906年)是一个专注于电工技术领域的国际标准化组织。国际电工委员会(IEC)成立于1906年,它是世界上成立最早的国际性电工标准化机构,负责有关电气工程和电子工程领域中的国际标准化工作。国际电工委员会的总部最初位于伦敦,1948年搬到了位于日内瓦的现总部处。1887-1900年召开的6次国际电工会议上,与会专家一致认为有必要建立一个永久性的国际电工标准化机构,以解决用电安全和电工产品标准化问题。1904年在美国圣路易召开的国际电工会议上通过了关于建立永久性机构的决议。1906年6月,13个国家的代表集会伦敦,起草了IEC章程和议事规则,正式成立了国际电工委员会。1947年作为一个电工部门并入国际标准化组织(ISO),1976年又从ISO中分立出来。宗旨是促进电工、电子和相关技术领域有关电工标准化等所有问题上(如标准的合格评定)的国际合作。该委员会的目标是:有效满足全球市场的需求;保证在全球范围内优先并最大程度地使用其标准和合格评定计划;评定并提高其标准所涉及的产品质量和服务质量;为共同使用复杂系统创造条件;提高工业化进程的有效性;提高人类健康和安全;保护环境。

ISO:(International Organization for Standardization,国际标准化组织,成立于1947年)是一个非政府性的国际标准化机构,负责制定除电工技术以外的各种技术标准。 国际标准化组织的前身是国家标准化协会国际联合会和联合国标准协调委员会。1946年10月,25个国家标准化机构的代表在伦敦召开大会,决定成立新的国际标准化机构,定名为ISO。大会起草了ISO的第一个章程和议事规则,并认可通过了该章程草案。1947年2月23日,国际标准化组织正式成立。ISO现有165个成员包括各会员国的国家标准机构和主要工业和服务业企业。中国是ISO始创成员国之一,也是最初的5个常任理事国之一。由于中华民国政府未按章交纳会费,1950年被ISO停止会籍。1978年9月中国以中国标准化协会名义参加ISO,1985年改由中国国家标准局参加,1989年又改由中国国家技术监督局参加。在2008年10月的第31届国际化标准组织大会上,中国正式成为ISO的常任理事国。(香港、澳门是ISO通讯成员。中国台湾地区不是ISO成员)

ISO/IEC: ISO 和 IEC 经常合作制定标准,特别是在信息技术领域,形成了ISO/IEC联合技术委员会ISO/IEC JTC 1(Joint Technical Committee 1, JTC 1);20世纪80年代末ISO/IEC联合技术委员会成立了 ISO-10646工作小组。

ISO/IEC 10646的一些版本如下:

  • ISO/IEC 10646-1:1993:1993年 发布了第一个版本,定义了基本的字符集。
  • ISO/IEC 10646-1:2000:这是对 ISO/IEC 10646-1:1993 的更新版本,发布于 2000年,增加了扩展区 A 的 6,582 个表意文字,总共包括 27,484 个表意文字。
  • ISO/IEC 10646-2:2001:作为对 ISO/IEC 10646-1:2000 的补充,发布于 2001年,增加了新的字符和符号。
  • ISO/IEC 10646:2003:发布于 2003年,包含了架构和基本多文种平面(Basic Multilingual Plane)以及补充平面的内容。
  • ISO/IEC 10646:2003/Amd 6:2009:发布于 2008年,增加了 Bamum、Javanese、Lisu、Meetei Mayek、Samaritan 等语言的文字。
  • ISO/IEC 10646:2020:这是最新的版本之一,发布于 2020年。
  • ISO/IEC 10646:2020/Amd 1:2023:这是对 ISO/IEC 10646:2020 的修正案,发布于 2023年。

对应和中文编码的兼容性

  • GB 13000.1-93 基于 ISO/IEC 10646-1:1993,因此与该版本兼容。
  • GBK 不是基于 ISO/IEC 10646 的,但它与 GB 2312 兼容,并且部分字符与 ISO/IEC 10646 的早期版本兼容。
  • GB 13000-2010 基于 ISO/IEC 10646 的最新版本,与该版本高度兼容。
  • GB 18030-2000 基于 ISO/IEC 10646-1:2000,与该版本兼容,并且支持更多的字符集。
  • GB 18030-2005 基于 ISO/IEC 10646-1:2000 及后续版本,与该版本兼容,并且增加了更多的字符集。
  • GB 18030-2022 基于 ISO/IEC 10646 的最新版本,与该版本高度兼容,并且支持更多的字符集。

6. BMP的分段规则和内容

在说明GB 13000-2010的时候提到了bmp的部分是强制性的,这几介绍一下bmp基本多文种平面(Basic Multilingual Plane, BMP)是Unicode编码标准中的一个重要组成部分,它包含了Unicode编码空间中最常用的65536个字符位置。这些字符位置从U+0000到U+FFFF,涵盖了世界上绝大多数语言的文字和常用符号。BMP被划分为多个区域(blocks),每个区域都有特定的用途,用于表示不同的字符集。下面是BMP中的一些主要区域及其内容:

  1. 控制字符和ASCII区域
    • 控制字符(U+0000至U+001F):这些字符是不可打印的控制字符,如换行、回车等。
    • ASCII(U+0020至U+007F):包含标准的ASCII字符集,包括大小写字母、数字、标点符号等。
  2. 拉丁字母区域
    • Latin-1 Supplement(U+0080至U+00FF):扩展的拉丁字母字符,包括一些欧洲语言的特殊字母和变音符号。
    • Latin Extended-A(U+0100至U+017F):更多的拉丁字母,包括东欧语言的字符。
    • Latin Extended-B(U+0180至U+024F):更多扩展的拉丁字母。
  3. 希腊和西里尔字母区域
    • Greek and Coptic(U+0370至U+03FF):希腊字母和科普特字母。
    • Cyrillic(U+0400至U+04FF):西里尔字母,用于俄语和其他斯拉夫语言。
  4. 希伯来和阿拉伯字母区域
    • Hebrew(U+0590至U+05FF):希伯来字母。
    • Arabic(U+0600至U+06FF):阿拉伯字母。
  5. 泰文、梵文等印度语言区域
    • Devanagari(U+0900至U+097F):梵文和其他印度语言的Devanagari脚本。
    • Bengali(U+0980至U+09FF):孟加拉语。
    • Gurmukhi(U+0A00至U+0A7F):旁遮普语。
    • Gujarati(U+0A80至U+0AFF):古吉拉特语。
    • Oriya(U+0B00至U+0B7F):奥里亚语。
    • Tamil(U+0B80至U+0BFF):泰米尔语。
    • Telugu(U+0C00至U+0C7F):泰卢固语。
    • Kannada(U+0C80至U+0CFF):卡纳达语。
    • Malayalam(U+0D00至U+0D7F):马拉雅拉姆语。
    • Sinhala(U+0D80至U+0DFF):僧伽罗语。
  6. 中文区域
    • CJK Unified Ideographs(U+4E00至U+9FFF):包含了最常见的中文字符,以及其他使用汉字的语言(如日语、韩语)的字符。
    • CJK Unified Ideographs Extension A(U+3400至U+4DBF):扩展的汉字字符。
  7. 其他语言区域
    • Thai(U+0E00至U+0E7F):泰语。
    • Lao(U+0E80至U+0EFF):老挝语。
    • Georgian(U+10A0至U+10FF):格鲁吉亚语。
  8. 符号和标点符号区域
    • General Punctuation(U+2000至U+206F):通用标点符号。
    • Mathematical Operators(U+2200至U+22FF):数学运算符。
    • Miscellaneous Symbols(U+2600至U+26FF):各种杂项符号。
  9. 表情符号和特殊符号区域
    • Emoji(U+1F600至U+1F64F):表情符号。
    • Miscellaneous Symbols and Pictographs(U+1F300至U+1F5FF):各种杂项符号和象形图。

这些只是BMP中的一部分区域,实际上还有许多

7. 参考文档链接

百度百科 ASCLL https://baike.baidu.com/item/ASCII/309296?fr=ge_ala

百度百科 UTF-8 https://baike.baidu.com/item/UTF-8/481798?fr=ge_ala

百度百科 统一码 https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E7%A0%81/2985798?fr=ge_ala

360百科 GB18030 https://upimg.baike.so.com/doc/5451123-5689493.html

360doc 汉字字数,GBK字库GB18030 http://www.360doc.com/content/15/1002/08/5239444_502800599.shtml

csdn ASCII 完整表 https://blog.csdn.net/qq_20173195/article/details/126989482

csdn C语言中的UTF-8编码转换处理 https://blog.csdn.net/molangmolang/article/details/136593628

csdn 认识编码 https://blog.csdn.net/weixin_41917948/article/details/118521607

知乎 常见的7种中文字符编码 https://zhuanlan.zhihu.com/p/46216008

简书 C++代码判断字符编码类型及编码格式转换(utf-8、gbk) https://www.jianshu.com/p/a83d398e3606

汉字和国际码查询 https://www.qqxiuzi.cn/bianma/guobiaoma.php

utf-8编码转换工具 https://www.qqxiuzi.cn/bianma/utf-8.htm

工标网 (方便查询标准)http://www.csres.com/detail/380895.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容