如转发,请标明出处!
在计算机中,所有的数据在存储和运算时都是使用二进制数表示。为了互相通信,就必须使用相同的编码规则。ANSI (American National Standard Institute)在1967年发表了一套单字节字符编码方案 - ASCII (American Standard Code for Information Interchange)。后来ISO (International Organization for Standardization) 和IEC (International Electrotechnical Commission)将其定为国际标准 - ISO/IEC 646
这个ISO的简称为啥不是IOS呢
这个ASCII只用到了7个bit,如果要表示中文,那肯定是不够的。所以需要某种多字节编码方案
GB 2312-80 是1980年制定的中国汉字编码国家标准。共收录 7445 个字符。GB2312 兼容标准 ASCII码,而一个汉字占用两个字节,每个字节的最高位为 1。具体办法是:收集了 7445 个字符,组成 94*94 的方阵,每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为区位码,编码范围是0x0101~0x5E5E。将区号和位号分别加上0x20,称为国标码,编码范围就是0x2121~0x7E7E。为了兼容ASCII码,再给国标码的每个字节加0x80,形成机内码,简称内码,是汉字在机器中实际的存储代码。因此GB2312-80标准的内码范围是0xA1A1~0xFEFE
GBK 即汉字内码扩展规范,共收入 21886 个汉字和图形符号,向下与 GB 2312 完全兼容,向上支持 ISO 10646 国际标准。GBK 采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线
GB 18030,国家标准 GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集。GB 18030 与 GB 2312-1980 和 GBK 兼容,共收录汉字70244个。GB 18030采用多字节编码,每个字可以由 1 个、2 个或 4 个字节组成。编码空间庞大,最多可定义 161 万个字符。支持少数民族的文字、繁体汉字以及日韩字。单字节,其值从 0 到 0x7F,与 ASCII 编码兼容。双字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x40 到 0xFE(不包括0x7F),与 GBK 标准兼容。四字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x30 到 0x39,第三个字节从0x81 到 0xFE,第四个字节从 0x30 到 0x39
Big5,又称为大五码或五大码,是使用繁体中文社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。Big5码是一套双字节字符集,第一个字节称为“高位字节”,第二个字节称为“低位字节”。“高位字节”使用了0x81-0xFE,“低位字节”使用了0x40-0x7E,及0xA1-0xFE
https://home.unicode.org/
Unicode,统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。早期的Unicode字符集(Unicode Character Set)使用2字节编码,即UCS-2。后来又出现了4字节编码,即UCS-4
UCS在计算机中的存储格式叫做UTF(Unicode Transformation Format)
UCS-2最直接的存储格式就是UTF-16了。UTF-16是完全对应于UCS-2的,即把UCS-2规定的字符直接保存下来。而根据字符序,又分为UTF-16LE (Little Endian)和UTF-16BE (Big Endian)。那如何判断某个文件使用的是UTF-16BE还是UTF-16LE呢?可以在文件头部添加BOM(Byte Order Mark)。由于UCS-2没有定义FFFE, 因此规定只要出现FFFE就是UTF-16LE,出现FEFF就是UTF-16BE
UTF-32就简单了,它用四个字节表示字符,这样就可以完全表示UCS-4,而无需像UTF-16那样使用复杂的算法。 与UTF-16类似,UTF-32也包括UTF-32、UTF-32LE、UTF-32BE三种编码,UTF-32使用的BOM就是FFFE0000(UTF-32LE)和0000FEFF(UTF-32BE)
实际计算机中存储的字符,多数在ASCII的范围内,不管使用UTF-16还是UTF-32都会造成很大的浪费
因此,又提出了用1~4个字节来表示的UTF-8,方式如下
可见,ASCII字符(0000-007F)只使用一个字节,避免了空间的浪费。而且UTF-8不再需要BOM字节了。另外,从表中可以看出,从首字节的取值范围就可以知道编码的字节数,这样大大简化了算法
话说,制定标准的这伙儿人呀,智商实在是高
最后,留个文本的ASCII表,以供查询
ASCII值 | Hex | 控制/字符 |
---|---|---|
0 | 0 | NUT - null |
1 | 1 | SOH - start of headline |
2 | 2 | STX - start of text |
3 | 3 | ETX - end of text |
4 | 4 | EOT - end of transmission |
5 | 5 | ENQ - enquiry |
6 | 6 | ACK - acknowledge |
7 | 7 | BEL - bell |
8 | 8 | BS - backspace |
9 | 9 | HT - horizontal tab |
10 | A | LF - line feed |
11 | B | VT - vertical tab |
12 | C | FF - form feed |
13 | D | CR - carriage return |
14 | E | SO - shift out |
15 | F | SI - shift in |
16 | 10 | DLE - data link escape |
17 | 11 | DC1 - device control 1 |
18 | 12 | DC2 - device control 2 |
19 | 13 | DC3 - device control 3 |
20 | 14 | DC4 - device control 4 |
21 | 15 | NAK - negative acknowledge |
22 | 16 | SYN - synchronous idle |
23 | 17 | ETB - end of trans. block |
24 | 18 | CAN - cancel |
25 | 19 | EM - end of medium |
26 | 1A | SUB - substitute |
27 | 1B | ESC - escape |
28 | 1C | FS - file separator |
29 | 1D | GS - group separator |
30 | 1E | RS - record separator |
31 | 1F | US - unit separator |
ASCII值 | Hex | 字符 |
---|---|---|
32 | 20 | (space) |
33 | 21 | ! |
34 | 22 | " |
35 | 23 | # |
36 | 24 | $ |
37 | 25 | % |
38 | 26 | & |
39 | 27 | , |
40 | 28 | ( |
41 | 29 | ) |
42 | 2A | * |
43 | 2B |
|
44 | 2C | , |
45 | 2D | - |
46 | 2E | . |
47 | 2F | / |
48 | 30 | 0 |
49 | 31 | 1 |
50 | 32 | 2 |
51 | 33 | 3 |
52 | 34 | 4 |
53 | 35 | 5 |
54 | 36 | 6 |
55 | 37 | 7 |
56 | 38 | 8 |
57 | 39 | 9 |
58 | 3A | : |
59 | 3B | ; |
60 | 3C | < |
61 | 3D | = |
62 | 3E | > |
63 | 3F | ? |
ASCII值 | Hex | 字符 |
---|---|---|
64 | 40 | @ |
65 | 41 | A |
66 | 42 | B |
67 | 43 | C |
68 | 44 | D |
69 | 45 | E |
70 | 46 | F |
71 | 47 | G |
72 | 48 | H |
73 | 49 | I |
74 | 4A | J |
75 | 4B | K |
76 | 4C | L |
77 | 4D | M |
78 | 4E | N |
79 | 4F | O |
80 | 50 | P |
81 | 51 | Q |
82 | 52 | R |
83 | 53 | S |
84 | 54 | T |
85 | 55 | U |
86 | 56 | V |
87 | 57 | W |
88 | 58 | X |
89 | 59 | Y |
90 | 5A | Z |
91 | 5B | [ |
92 | 5C | / |
93 | 5D | ] |
94 | 5E | ^ |
95 | 5F | _ |
ASCII值 | Hex | 字符 |
---|---|---|
96 | 60 | 、 |
97 | 61 | a |
98 | 62 | b |
99 | 63 | c |
100 | 64 | d |
101 | 65 | e |
102 | 66 | f |
103 | 67 | g |
104 | 68 | h |
105 | 69 | i |
106 | 6A | j |
107 | 6B | k |
108 | 6C | l |
109 | 6D | m |
110 | 6E | n |
111 | 6F | o |
112 | 70 | p |
113 | 71 | q |
114 | 72 | r |
115 | 73 | s |
116 | 74 | t |
117 | 75 | u |
118 | 76 | v |
119 | 77 | w |
120 | 78 | x |
121 | 79 | y |
122 | 7A | z |
123 | 7B | { |
124 | 7C | | |
125 | 7D | } |
126 | 7E | ` |
127 | 7F | DEL |
我是泰山 专注VX好多年
一起学习 共同进步