Python编码

Python文件处理,IDE和控制台

可以把python当做一个水池,水池里都是unicode,水池有一个入口,进入源数据,有一个出口,到写入地址

流程:

  1. 读源数据(文件\数据库表)–(2.以某种解码方式解码,转换为unicode)—-》python的unicode池—-(3.以某种编码方式对字符池编码)-》4写入到存储地址(展示时)

  2. 源数据有自己的编码方式A

  3. python的解码方式B
  4. python写入时的编码方式C
  5. 我们对写入后的数据打开时采用的编码方式D。打开方式可以有编辑器,工作台打印,IDE等。
  6. ABCD前后不一致而又没有转换得当,就会出现UnDecodeError\UnEncodeError,或者乱码. 所以在python代码过程中,最重要的事情就是规范编码。。

1.首先要保证代码源文件编码正确
py文件默认编码是ASCII,可以在文件头部进行编码声明。声明必须放在第一行或者第二行
格式:#--coding: utf-8--

#coding=utf-8

同一个项目中所有源文件头部要统一编码,并且声明的编码要和源文件保存的编码一致。。不然会有错误出现。。。
a.文件保存方式和文件头的编码方式之间的关系
文件的编码方式决定了在该源文件中声明的字符串的编码格式。如果头部声明是#coding=utf-8,但是保存格式是GBK,那么文件中的字符串会被按照GBK编码得到的字节流保存。。。但是python打开是按照头部声明utf-8打开(decode)的。所以会产生unicode error..

2.其次,在源代码用作处理的硬编码字符串,统一用unicode.
这样可以将类型和源文件本身的编码隔离开,

总之处理顺序:decode -> unicode everywhere -> encode

===================================================
相关模块
获得和设置系统默认编码

1
2
3
4
5
6
>>> 获得
>>> import sys
>>> sys.getdefaultencoding()
>>> #设置
>>>reload(sys)
>>sys.setdefaultencoding('utf-8')

注意:在python3中,不存在sys.setdefaultencoding的方法。因为编码问题总可以通过encode和decode问题解决,此方法是走后门的方法。python3直接禁止了该方法。。
而且python2中getdefaultencoding()是ascii,python3中得到的是utf-8。。也就是说3的默认编码就是utf-8