如何处理中午编码的问题python
Python的UnicodeDecodeError: 'utf8' codec can't decode byte 0xxx in positionlinux
这个错误是由于你代码中的某个字符串使用了费ascii编码的字符,也就是它表明的16进制的编码超过127。ide
解决这个问题可使用下面的方法解决,其实就是设置默认的编码。python 2.x的默认编码是ascii,若是改成utf-8,就能够了。函数
import sys reload( sys ) google
sys.setdefaultencoding('utf-8')编码
其实从python 3.0之后默认就用utf-8,就没有这个问题了。url
新手写pyhton程序常常遇到编码问题,实际上是对py的编码不熟悉,常常范小毛病,郁闷很久。。。spa
今天终于搞懂的py的编码。.net
1. pyhton的全部内置库、方法接受的是unicode编码的字符串。code
2. str.decode 函数就是转成unicode编码,因此能decode的字符串传级python的内置库、函数都能正确运行。
3.问题在于这个decode函数解码时到底要传哪一个参数:utf-8,gbk,gb2312......等N种编码。参数不当,就会抛相似异常:
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
下面举个例子:
#coding:utf-8
如何判断字符str的编码是什么?
使用 chardet 能够很方便的实现字符串/文件的编码检测。尤为是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,若是你须要去爬一些页面,知道网页编码很重要的,虽然HTML页面有charset标签,可是有些时候是不对的。那么chardet就能帮咱们大忙了。
>>> import urllib >>> rawdata = urllib.urlopen('http://www.google.cn/').read() >>> import chardet >>> chardet.detect(rawdata) {'confidence': 0.98999999999999999, 'encoding': 'GB2312'} >>>
chardet能够直接用detect函数来检测所给字符的编码。函数返回值为字典,有2个元数,一个是检测的可信度,另一个就是检测到的编码。
下载chardet后,解压chardet压缩包,直接将chardet文件夹放在应用程序目录下,就可使用import chardet开始使用chardet了。
或者使用setup.py安装文件,将chardet拷贝到Python系统目录下,这样你全部的python程序只要用import chardet就能够了。
python setup.py install
总结 :
尽可能把全部的input 都decode成unicode。即 str.decode('utf-8');
输出时,再encode成所需的编码格式
decode的做用是将其余编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的做用是将unicode编码转换成其余编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。