python蛋疼的编码decode、encode、unicode、str、byte的问题都在这了

  相信很多人和我一样,被python蛋疼的编码问题纠缠不清,比如下面的

python蛋疼的编码decode、encode、unicode、str、byte的问题都在这了

  私以为出现这种错误的原因还是对一些基本的编解码概念不够熟悉,下面就说说我的理解:

  首先python刚出来的时候unicode还没有一统江湖,期间很多代码和程序压根就是直接用ascii编码,反正代码都是英文写的,而且当时那个年代写代码一般都是说英文的,那就无所谓啦,人家用的爽才不care那么多,后来互联网开始兴起,全球各个地方的人都需要了,中国这边的话自己搞了套gbk(gb2312)编码,同时该编码包含了ascii,毕竟ascii就那么1个byte8bit的编码,随便都能包含进去了,后来unicode一统江湖后,才算解决了编码问题,但是很多应用软件和编程语言诞生年代久远,所以遗留了一些编码问题,这也就是为什么python、mysql等等常出现编码问题的原因了。

  python2中默认不指定的情况下使用的编码是ascii编码!!!

  首先 “str” 本质上是字符串,用print直接打印出来人类可读,byte本质是字节,用8位0和1的序列来表示的,为机器可读。

python蛋疼的编码decode、encode、unicode、str、byte的问题都在这了

由于python2默认的encoding是ascii 所以很明显,当一个中文的unicode想encode的时候就会出现中文无法用ascii编码的的错误,毕竟ascii只是unicode的一个子集。

反之也是