一、字符编码的发展史
1.计算机由美国人发明,最早的字符编码为ASCII,只包括英文字母和一些特殊符号。用8bit(1bytes)来表示一个字节,所以ASCII码最多只能显示256(2**8)个字符。
2.但是不同国家的计算机文字也需要字符显示。所以出现了各个国家的字符编码,如中国的gbk编码,日本的Shift-JIS编码,韩国的EUC-kr码等。
gbk用1bytes表示英文字符,2bytes表示汉字字符。
3.单一使用一个国家的字符编码时,如果同时出现其他国家的文字字符,就会出现乱码现象。这时候,为了满足同时显示多个国家的文字的要求,就出现了一种兼容万国的字符编码——Unicode。
Unicode将所有的字符,都用2bytes存储,2bytes只能存储65535种字符,但是它将多种字符编码的映射关系也存储了下来,所以可以同时存储上百万个字符。
这样对于大多数只用英文的国家来说,就浪费了一倍的存储空间。于是一种新的字符编码诞生——UTF-8(可变长,全称Unicode Transformation Format)。
它用1bytes存储英文字符,用3bytes存储中文字符,越生僻的字符,就用更大的容量去存储。
二、内存与硬盘中的字符编码
1.内存中,因为需要同时显示多种字符,所以统一使用Unicode编码,牺牲空间来兼容万国字符。
硬盘中,因为需要尽量减少存储的空间,所以会使用多种编码来存储。如gbk,Utf-8,ASCII码等等。
2.因为内存与硬盘中的字符编码不同,所以在硬盘中存取数据时,需要进行转换操作。
我们将字符从内存转换至硬盘叫编码(encode),从硬盘转换至内存叫解码(decode)。