用的版本2.7.11,使用notepad++和python的IDLE运行程序。
在编写python爬虫时遇到一个问题,对服务器提交post数据时,数据中有中文。
在提交时,如果在.py文件里,直接给某一个字符串赋值为中文,比如
mystr='查询'
服务器的反馈会出现问题。
然而在使用wireshark抓包跟踪通讯逻辑时,找到了某一个post的项的值为'\262\351\321\257'
于是,我进行了如下的测试:
在python的shell中,输入mystr='查询',然后直接输入mystr得到它的编码。
'\xb2\xe9\xd1\xaf'
输入mystr='\262\351\321\257' ,然后输入mystr得到同样的回答
'\xb2\xe9\xd1\xaf'
居然是一样的。
我对自己的python程序进行了抓包,发现post数据中该项是一个9位的编码,肯定是编码方式出现了问题。
这里需要知道中文在不同的编码方式里编码是不同的,常见的有gb2312和utf-8
notepad++对源程序的.py文件使用utf-8来进行编码,也就是说先把中文转化成utf8的编码,再进行储存。
python的编译器在读取某个.py文件时也是按照utf-8的原则读取的。
网页中的中文,读取html代码之后,会发现是中文是按照gb2312编码。
所以这里猜测python的shell使用gb2312来编码的,也就是和网页是同样的,这就是为什么使用shell和文件里,同样的包含中文代码,却有不同的执行效果。