概念
unicode是内部编码,utf8、gb2312是外部编码
encode 和 decode
输出、网络传输、打印,要把unicode encode成某种编码方式
print s.encode('utf8')
content.encode('utf-8')
unicode(str,'gb2312')与str.decode('gb2312')是一样的,都是将gb2312编码的str转为unicode编码
代码中的编码
代码中字符串的默认编码与代码文件本身的编码一致。 如:s='中文' 如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。
如果字符串是这样定义:s=u'中文' 则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。
coding的编码
# coding=utf-8
# -*- coding: utf-8 -*-
当你在py文件的第一行中,写了这句话,并确实按照这个编码保存了文本的话,那么这句话有以下几个功能。
- 使得词法分析器能正常运作,对于注释中的中文不报错了。
- 对于u"中文"这样literal string能知道两个引号中的内容是utf8编码的,然后能正确转换成unicode
- "中文"对于这样的literal string你会知道,这中间的内容是utf8编码,然后就可以正确转换成其它编码或unicode了。
原则
外部进来的字符串,尽可能第一时间转成unicode。
把Unicode应用到实际中注意一下四点:
- 程序中出现字符串时一定要加一个前缀u
- 不要用str()函数,用Unicode()代替
- 不要用过时的string模块。如果传给它非ASCII码,它会把一切搞砸。
- 不到必须时不要在你的程序里编解码Unicode字符,只在你要写入文件或者数据库或者网络时,才调用encode()函数和decode()函数。