错误:'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
看到网上很多都不清楚,做了一天的实验,终于搞清楚这些原理
如果有错误请指出,谢谢,希望不要一开口就喷。
总结:理解3个概念,代码编码类型,即python的源代码的编码格式,有中文必须#coding:utf-8,这句话是说pytho以utf-8去解析代码
系统编码类型,指的是控制台的输出平台的编码类型
系统默认编码类型,指的是在需要转换时的默认转换,一开始把这个与第一点混淆了。
举例:
1.
python默认的代码编码类型为ascii
代码中字符串的默认编码与代码文件本身的编码一致
s='中文' 这里的s为ascii类型
#coding:utf-8
必须得有这句才能识别出中文。无论是str还是unicode都得出现这句。
str默认是utf-8编码类型
s='中文' 这里的s为utf8类型
2
如果字符串是这样定义:s=u'中文'
则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可
3
import sys reload(sys) sys.setdefaultencoding('utf-8')
设置系统默认编码方式为utf-8
即没有说明的需要转换的会使用utf-8进行转换。
4 linux系统编码是utf-8,即控制台是utf-8
print 出来的东西必须和控制台的编码格式兼容。
5文件的读入
str的类型为读入的文件的类型
#coding:utf-8 声明出现的中文为utf-8。 import sys print sys.getdefaultencoding() 系统的默认编码方式认为ascii, a = '中文' b = u'中文' print repr(a),repr(b) print a, b.encode('utf-8') #这里的终端是utf-8,a是str,即为utf-8,b是unicode,默认编码为所以必须转成utf-8 reload(sys) sys.setdefaultencoding( "utf-8" ) print sys.getdefaultencoding() a = '中文' b = u'中文' print type(a),type(b) #这里终端已经是utf-8,a是str,即utf-8,b是unicode,系统默认编码为utf-8,所以会默认进行utf8编码,效果与主动编码一样 print repr(a),repr(b) print a, b