encoder和decoder,python中encode和decode怎么用
Python字符串编码和解码的研究:为什么乱码问题的解决方案会报告错误“Unicode decoder error: ASCII codec无法对位置0-1的字符进行编码:序数不在范围(128)内”?本文将研究这一问题。
该字符串的范围是Python内部的表示是unicode编码。所以编码转换通常需要使用unicode作为中间编码的范围,即先将其他编码的字符串解码成unicode,再从unicode编码成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(gb2312 ),表示gb2312编码的字符串str1转换为unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(gb2312 ),表示unicode编码的字符串str2转换为gb2312编码。
所以在转码的时候,首先要了解字符串str是什么编码,然后解码成unicode,再编码成其他编码。
中代码字符串的默认编码与代码文件本身的编码一致。
例如s=中文
如果在utf8文件中,字符串是utf8代码,如果在gb2312文件中,其代码是gb2312。在这种情况下,为了执行编码转换,需要首先使用decode方法将其转换为unicode编码,然后使用encode方法将其转换为其他编码。通常,当没有指定特定的编码方法时,使用系统的默认编码来创建代码文件。
如果字符串是这样定义的:s=u 中文
字符串的编码被指定为unicode,即python的内部编码,与代码文件本身的编码无关。因此,在这种情况下,我们只需要直接使用encode方法将其转换为指定的代码。
如果一个字符串已经是unicode了,再解码就错了,所以通常需要判断它的编码方式是不是unicode:
is instance(s,unicode) #用于确定是否为unicode。
以非编码编码的形式用str编码会报错。
如何获取系统的默认代码?
#!/usr/傻睫毛/env python
#编码=utf-8
导入系统
print sys.getdefaultencoding()
这个程序在英文WindowsXP上的输出是ascii。
在某些IDE中,字符串的输出总是出现乱码甚至错误,这其实是由于IDE本身的结果输出控制台无法显示字符串的编码,而不是程序本身的问题。
例如,在UliPad中运行以下代码:
S=u 中文
打印s
是:unicode编码器错误:“ascii”编解码器无法对位置0-1中的字符进行编码:序号不在范围内(128)。这是因为英文WindowsXP上的UliPad的控制台信息输出窗口是按照ascii编码输出的(英文系统默认编码是ascii),而上面代码中的字符串是Unicode编码,所以输出有错误。
将最后一句改为:打印s.encode(gb2312 )
可以正确输出单词“中文”。
如果最后一句改为:打印s.encode(utf8 )
output:\ xe4 \ xb8 \ xad \ xe6 \ x96 \ x87,是控制台信息输出窗口根据ascii编码输出utf8编码字符串的结果。
Unicode(str, gb2312 )与str.decode(gb2312 )相同,它将gb2312编码的str转换为Unicode。
使用str。__class__查看str的编码形式。
讲了半天原理,最后还是来个包治百病:)
代码如下:
#!/usr/cute睫毛/env python # coding=utf-8s= Chinese if幻觉(s,unicode):# s=u Chinese print s . encode( GB 2312 )Else:# s= Chinese print s . decode( utf-8)
转载于:https://www.cnblogs.com/testlife007/p/4555353.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。