每次遇到python处理含有中文的字符串时,utf-8, unicode, gb2312这些名词总是跳出来捣乱,然后经过网上一番搜索和烦恼的测试之后,才能最终解决问题。
可是,但是,可但是,这个问题在再一次遇到的时候,又是一番重复,烦不胜烦之下,记在案,常常来温习一下。(难道是我脑子不好了,没记性了,疲了???)
一些名词
ASCII - 一种编码方式
UNICODE - 又一种编码方式
UTF-8 - 又一种编码方式
Little endian和Big endian - 编码的“码”是如何存放的,从小到大还是从大到小
GB2312 - 汉字编码的一种,
代码页 -就是代码页
到这里看看就明白了,别的地方都不需要再看了
http://wiki.woodpecker.org.cn/moin/PyInChinese
关键的地方:如果python源文件中出现非ascii字符串,就需要指定编码声明
如果你的代码中出现:s = u"大a小",python大概要用编码声明,大概啊就要用编码声明去将字符串s转换为PyUnicodeObject
如果你编码声明为utf-8,而文件保存的格式不是utf-8,那么python解释就会出错。
如果你编码声明为gbk,那么,很好,你python源文件保存可以了,操作系统保存中文就是用系统的缺省编码保存的。
不论你的编码是什么,如果你在脚本执行过程中读入一个文件,那么这个就不是python在解释你的脚本,而是脚本的执行了。
这个文件的编码格式只有你知道,你把这个文件的内容送给一个字符串,是需要decode还是encode就只有你自己知道了。
几个常数,背下来有好处
D1 CF 严GB2312编码
严Unicode 编码是4E25。
严的UTF-8: E4B8A5
0x3f800000=1.0
0x3f333333=0.7
01 03 00 00 00 01 = 0a 84
01 03 00 01 00 01 = ca d5