一、
1.unicode只是一种编码方式。
ASCII码:只使用了7个比特位,127个字符 ——————> 美国——占 1 个字节
扩展ASCII码:使用了8个比特位,256个字符 ——————>拉丁——占 1 个字节
中文扩展ASCII码(GB2312):把拉丁的给霸占了,根据2个字节分别使用情况变化,几千个字符————>中国 —— 占 2 个字节
中文扩展ASCII码(GBK):根据第一个字节的使用情况变化,两万多个字符 —————> 中国 --- 占 1 个字节
Unicode(万国码):六七万个字符 ——— 全世界 ---- 都是 2 个字节,包括美国佬的英文。
UTF8(美国佬伤不起,在万国码基础上改进成能伸能缩的编码方式):
英文1个字节,非英文考虑两个或三个,中国变成3个字节了!坑!
2.编码与解码。
我们向软件输入文字并保存的过程(编码过程):
其实是软件通过操作系统调用cpu将你的明文字符读到内存,在内存里CPU将明文解码(decode)成以unicode编码方式的二进制,所以此时内存里存储的都是unicode(针对目前操作的文件而言),只有在传输或者向磁盘里保存数据时,cpu将内存里的unicode编码方式的二进制编码(encode)成utf8编码方式(也可能是其他编码方式)的二进制数,然后写到硬盘上(因为unicode占容量大)。
文件存的过程:unicode编码将明文——>unicode形式的二进制——>utf8形式的二进制——>磁盘
文件读的过程:
utf8(或者其他编码方式)它不能直接将二进制转化成明文,所以:
utf8二进制——>unicode二进制(在内存里进行)——>明文
3.按什么编码方式编就用什么编码方式解。
所以一般都会开头声明用什么方式解码:例如 #coding:utf8(或者其他方式)。
二、
注意点:1 unicode,utf8,gbk都是编码规则。
2 为什么内存存储的是unicode。
3 程序执行前和执行后两个状态。