Python编码问题

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 方法。
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值