为了账号安全,请及时绑定邮箱和手机立即绑定

编码/解码有什么区别?

编码/解码有什么区别?

www说 2019-11-05 10:50:12
我从来不确定我了解str / unicode解码和编码之间的区别。我知道这str().decode()是针对当您有一个字节字符串,并且您知道它具有某种字符编码的情况下,给定该编码名称,它将返回一个unicode字符串。我知道unicode().encode()根据给定的编码名称将Unicode字符转换为字节字符串。但我不明白是什么str().encode()以及unicode().decode()是。有人可以解释,也可以更正我在上面遇到的其他错误吗?编辑:有几个答案给出了.encode有关字符串作用的信息,但是似乎没人知道.decode对Unicode起作用的信息。
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

decodeUnicode字符串的方法实际上根本没有任何应用程序(除非出于某种原因在Unicode字符串中包含一些非文本数据,请参见下文)。我认为主要是出于历史原因。在Python 3中,它完全消失了。


unicode().decode()将执行隐式编码的s使用默认(ASCII)编解码器。像这样验证:


>>> s = u'ö'

>>> s.decode()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:

ordinal not in range(128)


>>> s.encode('ascii')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:

ordinal not in range(128)

错误消息是完全相同的。


对于str().encode()它周围的其他方法-它试图隐式解码的s默认编码方式:


>>> s = 'ö'

>>> s.decode('utf-8')

u'\xf6'

>>> s.encode()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:

ordinal not in range(128)

这样使用,str().encode()也是多余的。


但是后一种方法的另一种应用很有用:有些编码与字符集无关,因此可以有意义的方式应用于8位字符串:


>>> s.encode('zip')

'x\x9c;\xbc\r\x00\x02>\x01z'

但是,您是对的:这两个应用程序对“编码”的模棱两可用法令人生厌。同样,在Python 3中使用单独byte和string类型,这不再是问题。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 803 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信