1.编码理解
我们可以把计算机能够理解的语言假定为英语,
其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编码。2.编码原因
1)计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个
2)人类要表示的符号太多,无法用一个字节来完全表示
3)要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码
3.常见编码
常见的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等
并且GB2312、GBK、UTF-8、UTF-16 这几种格式都可以表示一个汉字.
ASCII
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示
ISO-8859-1
ISO-8859-1 涵盖了大多数西欧语言字符
GB2312
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,包含 6763 个汉字。
GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,
它的出现是为了扩展 GB2312,加入更多的汉字, 表示 21003 个汉字,它的编码是和 GB2312 兼容的,
也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
UTF-16
说到 UTF 必须要提到 Unicode(Universal Code 统一码)UTF-16 具体定义了 Unicode 字符在计算机中存取方法。
UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,
两个字节是 16 个 bit,所以叫 UTF-16。
UTF-8
UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,
有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍.
另外 UTF-16 采用顺序编码,不能对单个字符的编码值进行校验,如果中间的一个字符码值损坏,
后面的所有码值都将受影响.
而 UTF-8 这些问题都不存在,UTF-8 对单字节范围内字符仍然用一个字节表示,对汉字采用三个字节表示
4.如何选取编码:
对中文字符后面四种编码格式都能处理,GB2312 与 GBK 编码规则类似,但是 GBK 范围更大,它能处理所有汉字字符,
所以 GB2312 与 GBK 比较应该选择 GBK。UTF-16 与 UTF-8 都是处理 Unicode 编码,它们的编码规则不太相同,
相对来说 UTF-16 编码效率最高,字符到字节相互转换更简单,进行字符串操作也更好。它适合在本地磁盘和内存之间使用,
可以进行字符和字节之间快速切换,如 Java 的内存编码就是采用 UTF-16 编码。但是它不适合在网络之间传输,
因为网络传输容易损坏字节流,一旦字节流损坏将很难恢复,想比较而言 UTF-8 更适合网络传输,对 ASCII 字符采用单字节存储,
另外单个字符损坏也不会影响后面其它字符,在编码效率上介于 GBK 和 UTF-16 之间,
所以 UTF-8 在编码效率上和编码安全性上做了平衡,是理想的中文编码方式。 |
|