Python编码记录
字节流和字符串
当使用Python定义一个字符串时,实际会存储一个字节串:
"abc"--[97][98][99]
python2.x默认会把所有的字符串当做ASCII码来对待,但是当字节值>127时,默认解析便会出现问题。
x="abc"+chr(150)<br/> print repr(x)<br/> #'abc\x96'<br/> u"Hello" + x<br/> #UnicodeDecodeError: 'ASCII' codec can't decode byte
这就需要我们拿到一个字节流后,调用它的解码方式来创建字符串(Unicode对象)
x="abc\x80\x93"<br/> x=x.decode("utf-8")<br/> print type(x)<br/> <type 'unicode'><br/> y= "abc"+char(150)<br/> y=y.decode("windows-1252")<br/> print type(y)<br/> <type 'unicode'><br/> print x+ y<br/> #abc-abc-
codecs模块
在处理字节流的时候可以提供很大的帮助。你可以用定义的编码来打开文件并且你从文件里读取的内容会被自动转化为Unicode对象,也可以以指定编码处理Unicode对象然后写入到文件。
import codecs<br/> f=codecs.open('0.txt', 'w', 'utf-8')<br/> f.write(u"\u2013")<br/> f.close()