计算机基础:编码字符集
当字符的编码格式和解码格式不一致时,会出现乱码。
非统一编码
ASCII
美国国家标准学会(American National Standard Institute, ANSI)制定。
包含英文字母、数字和常用符号的编码。
- 使用 1 个字节,编码范围从
0
到127
,最高位始终为0
。 - 示例:
- 字符
A
编码是0x41
。 - 字符
1
编码是0x31
。
- 字符
GB2312
ASCII 编码使用 1 个字节,不足以表示其它国家的语言。
因此其它语言也有相应的编码标准。
- 使用 2 个字节表示一个汉字,首个字节的最高位始终为
1
。 - 示例:
- 汉字
中
编码是0xd6d0
。 - 类似的,日文有
Shift_JIS
编码,韩文有EUC-KR
编码。
- 汉字
统一编码
Unicode
不同国家编码的标准不统一,同时使用则会产生冲突。
为了统一全球主要语言的编码,全球统一码联盟发布 Unicode 编码。
-
使用 2 个或更多字节表示。
-
示例:
-
英文字符:ASCII 字符在首部添加
00
字节。┌────┐ ASCII: │ 41 │ └────┘ ┌────┬────┐ Unicode: │ 00 │ 41 │ └────┴────┘
-
中文字符:
┌────┬────┐ GB2312: │ d6 │ d0 │ └────┴────┘ ┌────┬────┐ Unicode: │ 4e │ 2d │ └────┴────┘
-
UTF-8
英文字符
Unicode
编码的高字节总是00
,浪费空间。
UTF-8
是一种变长编码。
- 节省空间: 使用 1-4 字节。
- 英文字符
A
编码0x41
,与 ASCII 码一致。 - 中文字符
中
编码0xe4b8ad
。
- 英文字符
- 容错能力强:若传输过程中某些字符出错,不会影响后续字符。
UTF-8
编码依靠高字节位来确定一个字符有几个字节。- 常用作传输编码。