Kow*_*lsy 6 python string unicode encode python-2.x
我明白了unicode,编码和解码.但我不明白为什么编码功能适用于str类型.我希望它只适用于unicode类型.因此我的问题是:当它在str而不是unicode上使用时,编码的行为是什么?
在Python 2中,有两种类型的编解码器可用; 那些在str和之间转换的unicode,以及那些转换str为str.后者的例子是base64和rot13编解码器.
该str.encode()方法支持后者:
'binary data'.encode('base64')
Run Code Online (Sandbox Code Playgroud)
但现在它存在,人们也将它用于unicode- > str编解码器; 编码只能去unicode到str(和解码的其他方式).为了支持这些,Python将在最终编码之前使用ASCII编解码器隐式解码您的str值unicode.
顺便说一下,当在对象上使用str- > str编解码器时unicode,Python首先隐式编码为str使用相同的ASCII编解码器.
在Python 3中,这已经通过以下方法解决:a)删除bytes.encode()和str.decode()方法(记住bytes是旧的str和str新的unicode),以及b)通过使用和函数将str- > str编码仅移动到codecs模块.同一类型之间的编解码器转换也已得到澄清和更新,请参阅Python特定编码部分 ; 请注意,在那里注明的'text'编码,在Python 2中可用,编码为.codecs.encode()codecs.decode()str