在python中对str使用encode时会发生什么?

2024-04-19 17:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我明白了unicode编码和解码的要点。但我不明白为什么encode函数对str类型有效。我希望它只能在unicode类型上工作。 因此,我的问题是:在str而不是unicode上使用encode时,encode的行为是什么?在


Tags: 函数类型编码unicode解码encode要点str
3条回答

在python3中,编码bytestring根本不起作用。在

>>> b'hi'.encode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'

当您对str调用encode时,Python2会尝试使用sys.getdefaultencoding()(通常是ascii)对字符串进行解码,然后对其进行编码。在

这就是为什么你得到一个相当奇怪的错误消息:当你试图用utf-8编码时,用ascii解码是不可能的。在

^{pr2}$

奈德解释得比我好,从16:20开始看。在

Python意识到它不能对str类型执行encode,所以它尝试先decode它!它使用'ascii'编解码器,如果有任何代码点高于0x7f的字符,则该编解码器将失败

这就是为什么当您尝试执行encode时,有时会看到一个decode错误。在

在python2中有两种可用的编解码器:在str和{}之间转换的编解码器,以及从str转换到{}的编解码器。后者的例子是base64rot13编解码器。在

存在str.encode()方法来支持后者:

'binary data'.encode('base64')

但是现在它已经存在了,人们也将其用于unicode->;str编解码器;编码只能从unicode到{}(反之亦然)。为了支持这些功能,Python将先使用ASCII编解码器将您的str值隐式地解码为unicode,然后再进行最终编码。在

顺便说一下,当在unicode对象上使用str->;str编解码器时,Python首先使用相同的ASCII编解码器隐式地编码到str。在

在Python3的Python3中,解决这个问题的方法有:a)去掉bytes.encode()}和{>}方法(记住{}是对老的{{}和{{}}新的{{>})的新的{{>}{{}},b)通过移动{{{}}编码编码到{{cd1}}}编码到}{cd26>}模块模块的模块,使用{a1}a1}和{cd1}和{cd1}cd1}和新的新的{<^{}函数。同一类型之间的编解码器转换也已经澄清和更新,请参见Python Specific Encodings section;请注意,此处提到的“文本”编码(在Python2中可用)改为str。在

相关问题 更多 >