0

我正在使用带有 PKCS1 填充的 Python M2Crypto 的 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')
4

1 回答 1

1

M2Crypto 模块专门处理不透明字节,它们是 0 到 255 之间的值,表示为 pythonstr类型。

Python 2.xstr类型由这样的字节组成,但unicode类型完全不同。.decode()您可以通过使用该方法及其镜像方法轻松地在两者之间进行转换.encode()

当你调用str()一个unicode对象时,它通过应用默认编码进行转换,本质上它调用email.encode(sys.getdefaultencoding()). 这对您的全 ASCII 电子邮件地址来说很好,但您肯定会遇到UnicodeEncodeError其他任何异常。最好坚持只使用显式方法。

请注意,您可能必须设置在您发送的电子邮件的 MIME 标头上使用的编码。

我强烈建议您阅读Python Unicode HOWTO中的所有内容。

于 2012-09-04T18:52:07.500 回答