1、首先要在开头说明编码方式为:utf-8
例如:-*- coding: utf-8 -*-
2、如果遇到字符串,立刻转化为unicode,不要使用str(),直接使用unicode()
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
3、如果是对于文件操作,打开文件的时候,最好使用codecs.open,替代open
import codecs
codecs.open('filename', encoding='utf8')
4、unicode通过encode编码转化成str,str通过decode解码转化成unicode
举个栗子:一个utf-8格式的字符串,先被解码为unicode,这时候不能直接输出,encode编码后就可以输出了
当对字符串进行编码的时候,会先用默认编码将自己解码为unicode,然后再将unicode编码为你指定的编码
一些个人理解,一开始的计算机只支持ASCII码,因为是美国人发明的,所以只支持127个字符;后来为了统一,出现了unicode码,也叫万国码,但是unicode编码的英文会比ASCII码多一倍存储空间,所以就出现了把unicode编码转化为可变长编码的UTF-8编码方式;在计算机内存中,统一使用unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
*****python的字符串类型是str,在内存中以unicode表示,一个字符对应若干个字节,如果要在网络上传输或者保存到磁盘上,就需要把str变为bytes。
python中,bytes类型的数据用带b的前缀的单引号或者双引号表示。以unicode表示的str通过encode()方法可以编码为指定的bytes。
*****反过来,如果从网络或者磁盘上读取了字节流,那么读到的数据就是bytes,要把bytes变为str,就要用到decode()方法。