Python M2Crypto RSA Unicode字符串与字节字符串编码不同
我使用PythonM2Crypto的RSA和PKCS1填充对电子邮件进行编码,以便与外部网站的API一起使用。当使用unicode时,编码的电子邮件没有从API返回任何结果,但是当我使用str(unicode_电子邮件)时,我收到了正确的信息 我的印象是,字符串的unicode和字节表示在这种情况下都应该起作用。有人知道unicode失败的原因吗 参考代码:Python M2Crypto RSA Unicode字符串与字节字符串编码不同,python,encryption,unicode,m2crypto,Python,Encryption,Unicode,M2crypto,我使用PythonM2Crypto的RSA和PKCS1填充对电子邮件进行编码,以便与外部网站的API一起使用。当使用unicode时,编码的电子邮件没有从API返回任何结果,但是当我使用str(unicode_电子邮件)时,我收到了正确的信息 我的印象是,字符串的unicode和字节表示在这种情况下都应该起作用。有人知道unicode失败的原因吗 参考代码: from M2Crypto import RSA email = u'email@example.com' #fails email =
from M2Crypto import RSA
email = u'email@example.com' #fails
email = str(email) # succeeds
rsa = RSA.load_pub_key('rsa_pubkey.pem')
result = rsa.public_encrypt(email, RSA.pkcs1_padding).encode('base64')
M2Crypto模块专门处理不透明字节,这些字节的值介于0和255之间,表示为python
str
类型
Python2.xstr
类型由这样的字节组成,但是unicode
类型是完全不同的。您可以使用和的镜像方法轻松地在两者之间进行转换
在unicode
对象上调用str()
时,它通过应用默认编码进行转换,本质上它调用email.encode(sys.getdefaultencoding())
。这对于您的所有ASCII电子邮件地址来说都很好,但是您肯定会遇到unicodeincodeerror
异常以及其他任何异常。最好只使用显式方法
请注意,您可能必须设置在发送的电子邮件的MIME头上使用的编码
我强烈建议您仔细阅读。字符通常为1字节宽。。。。unicode通常有2个字节宽。。。(至少是afaik…(特定于操作系统?)而且我很确定它应该是1字节宽的characters@JoranBeasley请阅读。Unicode不是字符编码,也与字节无关,但事实上,您不能将所有Unicode代码点都放入16位,因为其中有超过2^16个。@delnan谢谢。。。已添加书签以便以后阅读。。但好吧,我承认:)谢谢。我也会读的。:)