参考原文:http://www.cnblogs.com/yuanchenqi/articles/5956943.html,

https://www.cnblogs.com/284628487a/p/5584714.html

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.

 posted on 2018-11-27 11:25  庭明  阅读(184)  评论(0编辑  收藏  举报