python编码问题的理解与解决

错误:'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

 


posted @ 2016-06-05 22:09  linjiaqin  阅读(1661)  评论(0编辑  收藏  举报