摘要:在进行Python脚本的编写时,如果我们用python来处理网页数据或者进行与中文字符有关的处理工作,经常出现这样的出错信息:SyntaxError: Non-ASCII character '\xe6' in file ./filename.py on line 3, but no encoding declared。本文主要讲解python中与unicode和中文、特殊字符编码有关的问题。字符编码和解码需要遵循什么规律?
前言:
如果密码领域一样,从明文到密码是加密,从密码到明文是解密。在python中,编码:unicode-->str;解码str-->unicode.既然是编码,那么就和密码领域一样,编码和解码自然涉及到编码/解码方案(对应加密或者解密算法),unicode相当于明文。在python中,编码函数是encode(),解码函数是decode()。需要注意的一点是,如果我们调用str.encode(),这里涉及到一个隐士的类型转化,会现将str转化成unicode,才能进行编码,这也是不太容易理解的地方。所以,str.encode()实际上就等价于str.decode(sys.defaultencoding).encode().而sys.defaultencoding一般是ascii,它是不能用来编码中文字符的。
在阅读本文之间,如果你对字符编码不是很熟悉,有必要先了解以下字符编码。可以参考:字符编码简介。
1.一个中文字符编码问题
一个python脚本如下:
#!/usr/bin/python
string='我的'
printstring
运行脚本,提示信息如下:
SyntaxError: Non-ASCII character '\xe6' in file ./filename.py on line 3, but no encoding declared
出错原因:python默认采用ascii编码,而中文编码不再ascii编码能够表示的范围之内,所以string无法将“我的”作为ascii编码保存为str类型。
解决办法:采用中文字符编码,在脚本第二行加入编码类型,如下:
#!/usr/bin/python
#coding=gbk
string='我的'
printstring