我使用Python M2Crypto的带有PKCS1填充的RSA编码电子邮件以与外部网站的API一起使用。使用unicode时,编码的电子邮件没有返回API的结果,但是当我使用str(unicode_email)时,我收到了正确的信息。
我的印象是字符串的unicode和字节表示应该在这种情况下起作用。有谁知道为什么unicode会失败?
参考代码:
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')
答案 0 :(得分:1)
M2Crypto模块专门处理不透明字节,这些字节的值介于0和255之间,表示为python str
类型。
Python 2.x str
类型由这些字节组成,但unicode
类型是完全不同的野兽。您可以使用.decode()
method及其镜像方法.encode()
轻松地在两者之间进行转换。
当您在str()
对象上调用unicode
时,它会通过应用默认编码进行转换,实质上它会调用email.encode(sys.getdefaultencoding())
。这对你的全ASCII电子邮件地址来说很好,但是你必须遇到UnicodeEncodeError
个例外。最好只坚持使用显式方法。
请注意,您可能必须设置您在发送的电子邮件的MIME标头上使用的编码。
我强烈建议您阅读Python Unicode HOWTO中的所有内容。