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

Kow*_*lsy 6 python string unicode encode python-2.x

我明白了unicode,编码和解码.但我不明白为什么编码功能适用于str类型.我希望它只适用于unicode类型.因此我的问题是:当它在str而不是unicode上使用时,编码的行为是什么?

Mar*_*ers 8

在Python 2中,有两种类型的编解码器可用; 那些在str和之间转换的unicode,以及那些转换strstr.后者的例子是base64rot13编解码器.

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

'binary data'.encode('base64')
Run Code Online (Sandbox Code Playgroud)

但现在它存在,人们也将它用于unicode- > str编解码器; 编码只能去unicodestr(和解码的其他方式).为了支持这些,Python将在最终编码之前使用ASCII编解码器隐式解码您的strunicode.

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

在Python 3中,这已经通过以下方法解决:a)删除bytes.encode()str.decode()方法(记住bytes是旧的strstr新的unicode),以及b)通过使用和函数将str- > str编码移动到codecs模块.同一类型之间的编解码器转换也已得到澄清和更新,请参阅Python特定编码部分 ; 请注意,在那里注明的'text'编码,在Python 2中可用,编码为.codecs.encode()codecs.decode()str