0

Python M2CryptoのRSAとPKCS1パディングを使用して、外部WebサイトのAPIで使用する電子メールをエンコードしていました。unicodeを使用すると、エンコードされた電子メールはAPIから結果を返しませんでしたが、str(unicode_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')
4

1 に答える 1

1

M2Crypto モジュールは、Pythonstr型として表される 0 ~ 255 の値である不透明バイトのみを扱います。

Python 2.xstrの型はそのようなバイトで構成されていますが、そのunicode型はまったく別のものです。.decode()メソッドとそのミラー メソッドを使用して、2 つの間で簡単に変換できます.encode()

オブジェクトを呼び出すとstr()unicodeデフォルトのエンコーディングを適用して変換が行われます。つまり、 が呼び出されますemail.encode(sys.getdefaultencoding())。すべて ASCII の電子メール アドレスの場合は問題ありませんが、それ以外の場合は必ずUnicodeEncodeError例外が発生します。明示的なメソッドのみを使用することに固執することをお勧めします。

おそらく、送信する電子メールの MIME ヘッダーで使用したエンコーディングを設定する必要があることに注意してください。

Python Unicode HOWTOでこれらすべてを読むことを強くお勧めします。

于 2012-09-04T18:52:07.500 に答える