ASCII、Unicode、UTF-8

ASCII、Unicode、UTF-8

ASCII

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。

美国标准信息交换代码是由美国国家标准学会 (American National Standard Institute , ANSI) 制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于 50 年代后期,在 1967 年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为 ISO 646 标准。适用于所有拉丁文字字母。

ASCII 码采用指定 7 位或 8 位二进制组合来表示 128 或 256 种字符。

7 位 ASCII 码 8 位 ASCII 码
名称 基础 ASCII 码 基础 ASCII 码 + 扩展 ASCII 码(后 128 个)
范围 0x00 - 0x7F (0 - 127) 0x00 - 0xFF(0 - 255)
说明 理论上只用到 7 位,一个字节的最高位有特殊用途(不一定为 0) 前面 128 个兼容 7 位 ASCII,在 7 位基础上最高位补 0

标准 ASCII 码:标准 ASCII 码每个字符采用 8 bit(1 byte)传输,在 7 为 ASCII 码基础上,最高位用于奇偶校验。

奇校验:代码一个字节中 1 的个数必须是奇数个。以 7 位 ASCII 码的奇校验为例,如果 7 位中有奇数个 1,最高位补 0;如果 7 位中有偶数个 1,最高位补 1

偶校验:代码一个字节中 1 的个数必须是偶数个。以 7 位 ASCII 码的奇校验为例,如果 7 位中有奇数个 1,最高位补 1;如果 7 位中有偶数个 1,最高位补 0

后来扩展 ASCII 码不再作为国标(国际标准)。

一般我们所说的 ASCII 码是 8 位 ASCII 前 128 个(高位补 0)。

Unicode

ASCII 码只能表示少量的字符(8 bit 最多 256 个)。

其它语言显然无法用一个字节来存储(常用中文都超过 3000 了)。

为了统一全球所有语言的所有字符,显然需要提出一种新的标准。

通用字符集(Universal Character Set, UCS),有两种标准字符集 UCS-2 、UCS-4。分别表示 2 个字节定长字符编码和 4 个字节定长字符编码。

Unicode 编码采用 2 字节(16 bit)表示一个字符,对于以前的 ASCII 码则高字节全部补 0 进行处理。

最多能支持 65536 个字符。

弊端

  • Unicode 编码与 ASCII 码完全不兼容。对于以前的 ASCII 码文件,无法区分是 ASCII 码字符还是 Unicode 字符。
  • 可支持的字符依然较少,虽然比起 ASCII 码最多 256 个,最多 65536 个字符已经属于很多了。但依然无法囊括全球所有国家的字符。(中国汉字就超过 30000 ,虽然常用的不多,但是总有人取生僻字,你说这个该不该显示呢?)
  • 采用 4 字符定长编码,可以囊括更多国家的字符。但是随着而来的会造成不必要的空间浪费。(一个纯 ASCII 码英文文档,采用 UCS-4 后体积增大 3 倍,显然这种做法很不可取)。

UTF-8

由于不兼容 ASCII 码,可支持字符不足,存在较大的空间浪费。使得 Unicode 编码的推广受到严重的限制。

为了解决以上问题,推出了 UTF-8 变长字符编码标准,可以使用 1 ~ 6 个字节表示一个字符。

根据编码的头部来区分属于什么编码,兼容了 ASCII 码, Unicode 编码。

与 Unicode 编码的对应关系为:

bit 数 Unicode / UCS-4 UTF-8 二进制 byte 数
0 - 7 0000 0000 - 0000 007F 0xxxxxxx 1
8 - 11 0000 0080 - 0000 07FF 110xxxxx 10xxxxxx 2
12 - 16 0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 3
17 - 21 0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4
22 - 26 0020 0000 - 03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 5
27 - 31 0400 0000 - 7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6

按照上标可以兼容 Unicode 编码。

而 1 字节 UTF-8 的编码规则可以兼容 ASCII 码。

附录 I :ASCII 码字符列表

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 (filator) 文件分隔符
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
0100 1010 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) 删除

附录 II :Unicode 编码字符列表

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-07FF 西非书面语言 (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)
0D80-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 高棉语记号 (Kmer Symbols)
1A00-1A1F Buginese
1A20-1A5F Batak
1A80-1AEF Lanna
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-9FBF 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)

你可能感兴趣的:(ASCII、Unicode、UTF-8)