ASCII,是美国信息交换标准代码,一共128位,后来发现不够用,就在此ASCII标准上进行扩展,扩展出来的编码标准成为ANSI,美国国家协会认可的标准,中国人的扩展标准称为GBK,英国人的扩展标准称为ISO-8859-1,所以中文的windows系统扩展编码标准是GBK,英文的扩展标准是ISO-8858-1。
而Unicode是统一码联盟指定的编码方案,uft-8是它的转换格式之一
然后我是这么认为的,你在代码文件的开头写了一句:
-*- coding: utf-8 -*-意思就是将所有代码以uft-8的标准进行编码
但是,window中文系统下的中文编码部分是采用的GBK编码规则,也就是说你用了utf-8的标准进行编码,windows的cmd就无法再GBK的默认编码标准下进行解码,从而形成乱码
所以如果你写的是-*- coding:gbk -*-就不会有乱码的问题了,或者你可以在中文字符串前加一个u,如:u‘中文’,将其转换成unicode,也可以解决乱码的问题
在我们的日常编码生活中,经常会因为不知道系统软件的默认编码方式而导致的中文乱码
这里我有两种解决方式:
1、在中文字符串前加一个u,将它们都变成Unicode的形式,但是这会有个问题,在Python2一串字符有分str和Unicode两种类型,通过直接加u的方式会改变它所属的类型,即原本是str类型就变成了Unicode
2、比第一张方法稍微麻烦一点,但是不会有副作用,就是当你在文件的开头指定了统一编码方式后,如
-*- coding:utf-8 -*-,在打印的中文字符串后加.decode('utf-8'),如print '中文'.decode('utf-8');
但是有个规定是str类型的不能用encode方法,Unicode类型的不能用decode,所以在使用具体方法前还需要进行类型判断
最后对于Python3来说,解决了很多Python2的中文编码问题,这是因为Python3的str字符串等价于Python2中的Unicode字符串,也就是说python3中的'中文'相当于python2的u'中文'