encoder和decoder,python中encode和decode怎么用

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: