好像写Python的人常常遇到这个问题,若是是一个新手,对网上的解答简直头都大了.若是又是Python2.x,简直了都(历史缘由,不赘述)
可是,字符串编码是常常要面对的问题,不可不察.网络
Unicode与各类编码格式工具
个人理解是:Unicode是一种规则
,法则
,抽象的
,飘在空中的
; 而各类编码则是工具
,把Unicode字符捣鼓成咱们想要的东西
. 在Python中,Unicode充当着解决各类字符编码问题的桥梁
编码
数据(字符串)与Python程序无非两种关系: 数据流到Python程序中(输入),Python程序流出各类数据(输出).
code
数据从外部(文件,网络等地方)-->Python程序时utf-8
先不急,用一个unicode接住它们,而后再进行以后的各类操做ci
content = unicode(originalContent, 'src_data_encoding') #此处必需要知道源的编码格式
数据从Python-->外部时unicode
Unicode字符是不能随便写的,要先把咱们的Unicode编码成具体编码格式,而后再写出字符串
content = unicodeContent.encode(encoding) #必需要清楚目的地能接受的编码格式
其余须要知道的cmd
1 Python有时会「自做主张地」转换咱们的unicode(以ascii格式),简直stupid
,ascii就那么几个字符,确定常常抛UnicodeEncodeError啊
2 Python有时能猜到目的地
的编码,猜到万幸,没有猜到就抛错误
3 使用Windows_中文版的人须要知道它的cmd控制台是gbk编码的
4 Linux等就好多了,我老是「若是不清楚该使用什么编码,那就是utf-8了」
5 文件头加一个coding=utf-8
什么的/或者经过sys模块
6 always be utf-8-no-bom
老是好的,全部IDE/editor都默认编码为utf-8-no-bom
,能够省去许多麻烦(其中Windows的记事本少用,一不当心就忘记了记事本会插入BOM
这一事实)
7 若是能用Python3就毫不使用Python2,3修补了字符串的许多坑(不仅是unicode这一项)it
举例
1 Windows_cmd控制台打印unicode
Windows8中文版-Python2.7 s = u'中国人民' print s #ok,看来Python知道应该使用什么编码,隐式转换了 print s.encode('gbk') #ok,目的地能接受gbk print s.encode('utf-8') #fail,看来万能的utf-8很差用啦,由于目的地不接受
2 有时候从网页获取来的数据多是utf-8的,可是打印到Windows_cmd控制台出错了
content = unicode(contentFromHtml, 'utf-8') #固然也有多是其余编码 print content.encode('gbk') #转换层控制台能接受的编码
总结
unicode是一座桥梁
,链接这桥这头与那头