Python程序开头写#coding=utf-8的作用
Python文件编译最终还是要转换成字节码,Python程序开头写#coding=utf-8的作用其实就是把这个Python程序文件按照utf-8编码的方式映射到字节码,如果不加这个开头,程序里面的中文会按照Python默认的ascii码方式encode,这个肯定是要报错的,大家都知道,如果程序里写了中文但是没有加这个开头,那么pycharm会在一开始就报错,也是这个道理。加了这个开头之后,程序里面的字符都将会使用utf-8编码的方式被映射到字节码,也就是上一个大节里面的byte string,值得注意的是,程序中的汉字将会以utf-8的形式编码成为字节码,因此如果需要将其decode到Unicode字符,也是需要使用utf-8方式decode。
-
python2 系统默认的编码与解码方式ascii,
encode和decode
讲解编码和解码之前,先来讲讲Unicode和utf-8的关系
可以这样来理解:字符串是由字符构成,字符在计算机硬件中通过二进制形式存储,这种二进制形式就是编码。如果直接使用 “字符串↔️字符↔️二进制表示(编码)” ,会增加不同类型编码之间转换的复杂性。所以引入了一个抽象层,“字符串↔️字符↔️与存储无关的表示↔️二进制表示(编码)” ,这样,可以用一种与存储无关的形式表示字符,不同的编码之间转换时可以先转换到这个抽象层,然后再转换为其他编码形式。在这里,unicode 就是 “与存储无关的表示”,utf—8 就是 “二进制表示”。
python2中字符串有两种表示形式,str和unicode。str可以理解为上面这段话中的二进制编码格式,unicode可以理解为抽象层。encode是编码,即从unicode格式到二进制的编码格式如utf-8、gb2312等。decode是解码,即从二进制编码格式到unicode编码格式。 -
Python2读写文件的编码问题
和上面对应的,使用f=open()这个方法打开待写文件时,
使用f.read()得到的是unicode的编码方式结果;使用f.write()或者f.writelines()切记把文本encode转换成字节形式,使用codecs.open()这个方法打开文件,codesc.write()需要写入的是unicode字符。编码: unicode(unicode string) --> 字节流(byte string) 解码: 字节流(byte string) --> unicode(unicode string) 更改系统默认编码: import sys reload(sys) sys.setdefaultencoding("utf-8") #系统默认编码方式更改为:utf-8 print 可以打印 字节流(byte string)、unicode(unicode string)中文
-
python3 系统默认的编码与解码方式utf-8,
str 与 bytes 之间的转换可以用 encode 和从decode 方法。