python编码问题记录
2021-01-20 11:13
阅读:571
这类问题一般出现在python2中,在编码类型转换中触发。
python2中有两个编解码函数:
decode
和encode
,用于unicode编码和其他编码方式的转换。decode
将其他编码类型的字符串,转化为unicode编码,反之,encode
将unicode编码转换为其他. 我们可以通过这两个函数,获取某种编码下的变量值,如:>>> import chardet >>> a = ‘张三‘ >>> chardet.detect(a) {‘confidence‘: 0.7525, ‘language‘: ‘‘, ‘encoding‘: ‘utf-8‘} # 系统默认编码为utf-8, 所以a的编码为utf-8 >>> b = a.decode(‘utf-8‘) # 用utf-8 解码后,得到unicode字符串 >>> b u‘\u5f20\u4e09‘ >>> c = b.encode(‘gb2312‘) # 将unicode 编码为gbk >>> chardet.detect(c) {‘confidence‘: 0.682639754276994, ‘language‘: ‘Russian‘, ‘encoding‘: ‘KOI8-R‘} >>> chardet.detect(a.decode(‘utf-8‘).encode(‘gb2312‘)) # 一次性变更有同样的效果 {‘confidence‘: 0.682639754276994, ‘language‘: ‘Russian‘, ‘encoding‘: ‘KOI8-R‘}
但是,当由于某种原因,我们无意将一种非unicode编码,转换为另一种非unicode编码,且未指定解码方式时,可能出现上述error,如
>>> a.encode(‘gb2312‘) # a是utf-8编码,强行转换成gb2312,会出错 Traceback (most recent call last): File "
", line 1, in UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in position 0: ordinal not in range(128) 这是因为,如果a不是unicode编码,且要转换成另外一种编码的情况下,python会用默认的解释器编码先进行解码,即进行
a.decode(‘ascii‘)
的操作,但是由于a中包含中文,ascii无法解析,故报错
上一篇:R语言基础-统计函数
评论
亲,登录后才可以留言!