Python2与Python3字节转换为字符串函数decode的区别

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

Python转换字节为字符串可以使用decode函数,但decode函数在Python 2和Python3有所不同。

Python 2.7

help查看decode的函数说明

>>> help(b''.decode)
Help on built-in function decode:

decode(...)
  S.decode([encoding[,errors]]) -> object

  Decodes S using the codec registered for encoding. encoding defaults
  to the default encoding. errors may be given to set a different error
  handling scheme. Default is 'strict' meaning that encoding errors raise
  a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
  as well as any other name registered with codecs.register_error that is
  able to handle UnicodeDecodeErrors.

Python 2.7的decode函数如果缺失encoding,使用的是系统默认的编码。

获取系统的默认编码

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

这里的系统默认编码为ascii,如果是非‘ascii’使用decode函数不指定编码会抛出异常

>>> s=u'你好'
>>> b=s.encode('utf8')
>>> print b.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal
not in range(128)
>>>
>>> print b.decode('utf8')
你好

字符串s使用utf8编码得到字节b,使用decode直接对字节b解码时,报ascii解码不了字节。使用decode指定解码为utf8后,解码正确。

所以,在Python 2使用decode对字节解码时,建议指定编码。

Python 3.x

使用help查看decode的帮助说明

>>> help(b''.decode)
Help on built-in function decode:

decode(encoding='utf-8', errors='strict') method of builtins.bytes instance
  Decode the bytes using the codec registered for encoding.

  encoding
   The encoding with which to decode the bytes.
  errors
   The error handling scheme to use for the handling of decoding errors.
   The default is 'strict' meaning that decoding errors raise a
   UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
   as well as any other name registered with codecs.register_error that
   can handle UnicodeDecodeErrors.

可以看出Python3中decode函数的默认编码指定为了utf-8。所以

b'hello'.decode()

等同于

b'hello'.decode('utf-8')
>>> s='你好'
>>> b=s.encode('utf8')
>>> b.decode()
'你好'

在这个例子里,你会看到对字符串s的赋值,‘你好’是没有u作为前缀。这是因为系统的默认编码为utf8

查看系统编码

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

在python 3,系统的默认编码为utf-8

版权声明:著作权归作者所有。

相关推荐

TypeScript:字符串转换为数字

在TypeScript,String转换为Number有以下方式:Number构造函数(推荐)let n = Number('1234') // 1234 let nan = Number('abcd') // NaN +号操作符let n = +'1234' 

Python:字符串和datetime的转换

Python的字符串和时间的转换可以分别使用strptime和strftime。strptime(string parse time)datetime.strptime(date_string, format),根据format指定的时间格式解析用于表示时间的字符串date_string。>>>from datetime import&nb

Python判断字符串是否为数字

Python判断一个字符串是否为数字,可以分为两种情况考虑。字符为纯数字如果需要检测的数字为纯数字,不包括负号,小数点等,可以使用字符串的isdigit()函数来判断>>> a = "001" >>> a.isdigit() True >>> a = &q

Swift 4转换html为字符串文本

Swift 4可以添加extension来把html转换为字符串。String添加扩展extension String {     var html2AttributedString: NSAttributedString? {       

Python对数字字符串补全0

Python有两个方法都可以用来对字符串补全:zfill 和 rjust/ljust。如果对数字补全0:>>> '99'.zfill(5) '00099' >>> '99'.rjust(5,'0') '00099' 如果要右补全,可以使用ljust():>>> '99'.ljust(5,'0')

JavaScript转换boolean值为数字的几种方法

方法一:三元运算var i = result ? 1 : 0;方法二:+号操作符+ true; // 1+ false; // 0方法三:Number构造函数Number(true)//1Number(false)//0方法四:或运算result | 0;其中,方法一和方法四是相对另两种方法要快。

Python3获取字符的ASCII值

ord()函数可以获得字符的int值。相反,可以使用chr()函数来获得字符。>>> ord('a')97>>> chr(97)'a'>>> chr(ord('a') + 3)'d'>>>如果是Python2的unichr函数,可以获得数值的unicode码:>>> unichr(97)u'a'>>

JavaScript转换xml为json的函数

javascript转换xml为json的函数如下:function xmlToJson(xml) { // 新建返回的对象 var obj = {}; if (xml.nodeType == 1) { // 处理属性 if (xml.attributes.length > 0) { obj["@attributes"] = {};