在计算机中,所有的数据在存储和运算时,都要使用二进制数表示。编码是指具体使用哪些二进制数字表示哪个符号。
ASCII 码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)
使用标准的单字节字符编码方案,规定了 128 个字符的编码。(最前面的一位统一规定为 0,只使用一个字节后面的七位)。
ANSI 编码
对于中文及相关字符,128 个字符显然不够,因此在 ASCII 编码方案的基础上,中国大陆地区设计了 GB系列编码;同样,世界各个国家和地区的文字都有对应的编码。这些编码兼容 ASCII,但互相之间并不兼容,微软将其统称为 ANSI编码。
在微软 Windows 系统中,ANSI 编码一般代表系统默认的编码方式,并不是确定的某一种编码方式:
- 在简体中文操作系统中 ANSI编码 默认指的是 GB系列编码(GB2312、GBK、GB18030)
- 在日文操作系统中 ANSI编码 默认指的是 Shift JIS编码
GB 系列编码
GB2312
GB2312 规定一个小于 127 的字符的意义与原来相同,而两个大于 127 字符连在一起时,就表示一个汉字,前面的一个字节(高字节)从 0xA1 到 0xF7,后面一个字节(低字节)从 0xA1 到 0xFE,这样就可以组合出大约 7000 多个简体汉字。
GB2312 是对 ASCII 的中文扩展。兼容 ASCII。
GBK
不再要求低字节一定是127号之后的内码,只要第一个字节是大于 127 就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。
GBK 包括了GB2312 的所有内容,同时又增加了近 20000 个新的汉字(包括繁体字)和符号。
GB18030
GB18030 采用多字节编码,每个字符可以由 1 个、2 个或 4 个字节组成。
Unicode
Universal Multiple-Octet Coded Character Set, 简称 UCS,也称为 Unicode
Unicode 是一个符号集,将世界上所有的符号都纳入其中,每一个符号都有独一无二的编码,规定使用 2 个字节来表示一个字符。
Unicode 没有考虑与任何一种现有的编码方案保持兼容,导致 GBK 与 Unicode 在汉字的内码编排上完全不一样,没有一种简单的算数方法可以将文本内容从 Unicode 编码和另一种编码进行转换,必须通过查表来进行。
Unicode 只规定了符号的二进制代码,并没有规定这个二进制代码如何存储。
UTF-8
为了解决 Unicode 在网络上传输的问题,出现了众多 UTF (UCS Transfer Fromat) 标准,如 UTF-8 表示每次传输 8 位的数据,UTF-16 表示每次传输 16 位的数据。
UTF-8 是一种变长的编码方式,可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度。
对于汉字,UTF-8 编码需要 3 个字节。