最近写代码遇到了python2的编码问题,在网上看过其他大佬的各种总结和我的实际操作来写一点总结。方便以后回顾。也不一定对,所以不做他人的参考
1.编码和解码的概念
编码是把各种字符,包括中英文,标点等编成计算机能理解的二进制代码(byte string也叫字节流)
解码是把二进制代码解释成人们能理解的各种字符(也可以认为就是unicode码,因为一个unicode码就代表一个字符,unicode包含了世界上所有字符)
2.python2中字符有两种类型
一种是str类型,就是byte string字节流。另一种是unicode型,用法是a=u'你好'。这两种类型的字符都可以正常print
3.程序中出现中文乱码怎么解决
这里引用一位大佬的总结
在python2中英文字符全都是用ascii码编码的,不管怎么print都没问题,但是如果某个变量含中文字符,那么ascii码不能识别,所以需要在文件头加上注释#coding=utf-8,申明用utf-8编码,而我发现在pycharm中,如果定义一个a=‘你好’,a确实是用utf-8编码的(这是因为开头申明过了),但是print a会出现乱码,这是由于str类型变量的编码方式和pycharm的编码方式不一样造成的,我在pycharm的file->settings->editor->file enconding找到pycharm的project encoding默认是GBK,把它也改成utf-8就不会出现中文乱码了。这里注意如果a是unicode类型的变量那么不会有任何乱码问题,所以解决中文乱码的另一个方法就是print a.decode('utf8').
3.打开本地html文件时报错或者出现中文乱码
这里情况有点复杂,如果文件打开出现中文乱码那么原因就还是上面红字说的str类型变量的编码和pycharm编码方式不一样,要么改pycharm的编码方式,要么就用charset.detect()看文件的编码方式是什么,然后按照相同方式解码,就是上面红字说的第二种方法。有时候还会报错,我觉得为了大部分打开文件时和爬网页时的正确性,还是改掉pycharm的project encoding为utf8吧。
参考资料有https://www.cnblogs.com/yangruiGB2312/p/5790405.html,http://blog.csdn.net/u010223750/article/details/56684096,https://www.cnblogs.com/litaozijin/p/6416133.html