ASCII码
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUT 32 (space) 64 @ 96 、
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL
Unicode字符集
Unicode就是来解决同一个二进制数字会在不同的编码方式时,被解释成不一样的符号的问题,Unicode是一个很大的集合,可以容纳100w+个字符,而且是独一无二的。但是它只规定了符号的二进制代码,并没有规定二进制代码如何存储、传输,所以导致出现了多种Unicode的存储方式。在unicode字符集里,一个中文字符占两个字节,
UTF-8
一种变长的编码方式,可以用1-4个字节来表示一个字符,无存储顺序的问题,所以一律不要带BOM
- 对于单字节符号,第一位是0,后7位是这个符号的unicode码,所以英语字母的UTF-8编码和ASCII是一样的
- 对于2个及以上字节的符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
- 一个中文字符占3个字节
比如 ‘汉’子的unicode编码是\u00006C49 转换成二进制就是01101100 01001001 所以UTF-8编码就应该是 11100110 10110001 10001001 再换成成16进制就是UTF-8编码就是 E6B189
UTF-16
UTF-16 以16位无符号整为单位,以两个字节来表示一个字符
UTF-32
使用4字节的数字来表达每个字母、符号,或者表意文字,很少使用,定义的范围太大,大部分字符使用不到,数据冗余性太大
GB2312
又称国标码,是一个简化字的编码规范,用两个字节表示一个符号,但是每个字节采用七位编码,共有7445个图形字符,汉字6768个
Big5
是一个繁体字编码,所以主要是港澳台在使用,也是双字节编码
GBK
是GB2312的扩展,其中k即kuo的简写,共收录了21886个图形符号,GB2312中的汉字的编码与GBK中汉字的相同,GBK包含繁体字但是和Big5编码不一样。
ANSI
(American National Standard Institite)美国国家标准协会。每个国家自己制定自己的文字编码规则,并得到ANSI的认可。这个是windows自带的笔记本另存的时候常见的,其实就是根据当前本地环境选定具体的编码,比如简体中文的windows就是GBK。同时在windows下,会在UTF-8文件中使用BOM,而且把带有BOM的UTF-16/LE 称作Unicode编码
BOM
Byte Order Mark的简称,是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)
参考博文
字符编码笔记:ASCII,Unicode和UTF-8 by 阮一峰
带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个
字符集和字符编码
python 字符串和编码