python3中默认的编码是utf-8( py2中默认编码是ascii),所以不需要在文件的开头注释#coding=utf8
文件存储在硬盘中时是以byte形式保存的,而utf8 就是用来在读取文件时,将bytes解码成unicode.(unicode就是在内存中时字符的表示形式,也就是我们看到的明文)。
保存数据时,用utf8将字符编码成字节,保存到磁盘。bytes类型的字符前缀为 b'',unicode类型的的前缀为u'',
ascii码是用1个字节即8位表示一个字符,只包含英文和拉丁文
unicode编码用2个字节共16位表示一个字符,可以包含所有的字符。
utf-8是变长编码,英文和拉丁文用1个字节表示,汉字通常是3个字节,生僻字可能为4-6个字节。
gbk适用于纯汉字编码,一个字符用1个字节表示,包含英文与中文,gb2312编码包含的汉字是gbk的子集。
windows的cmd默认的编码是GBK,所以在输出用utf8编码的字符时会乱码。在window操作系统上读取文件时,是调用系统接口读取文件,系统默认编码是gbk,所以解码utf8的文件时会乱码。Linux操作系统默认是utf8编码。
对于要打印出的字符,读取文件时,可以添加encoding='utf8'.如果文件保存时是gbk,在win下就不需要指定encoding了。
读取文件时,磁盘中的utf8编码的bytes被解码成unicode,表示在内存中,供编辑,读取。
保存文件时,内存中的unicode字符被编码成utf8保存到磁盘中。
浏览网页时,服务器把动态生成的unicode内容转换成utf8再传输到浏览器,浏览器再把utf8字符解码成unicode供我们浏览。
在网络中传输和在磁盘中保存的形式为字节,在内存中表示的形式为unicode.