1

メールの件名を解析して、(件名の長さに応じて) で始まる複数の文字列を取得しています=?UTF-8?B?。これは正常な動作ですか?文字列を 1 つのエンコーディングで 1 つの文字列に結合するにはどうすればよいですか?

email_message = email.message_from_string(raw_email)
print email_message['Subject']

...

=?UTF-8?B?15bXkNeqINeR15PXmden15Qg15HXodeZ16HXmdeqINeR15vXk9eZINec15TXkdeZ158g?=
 =?UTF-8?B?157Xk9eV16Ig15TXp9eZ15PXldeTINeU15bXlCDXnNeQINei15XXkdeTINeQ150g15DXoNeZINeo15U=?=
 =?UTF-8?B?16nXnSDXlNeo15HXlA==?=

編集:

subjectDecoded, encoding = decode_header(email.utils.parseaddr(email_message['Subject'])[1])[0]
if encoding==None:
    subjectDecodedParsed = email_message['Subject']
    print 'I am NOT decoding Subject'
    print subjectDecodedParsed
else:
    subjectDecodedParsed = subjectDecoded.decode(encoding)
    print 'I am decoding subject'
    print subjectDecodedParsed.encode('utf8') #<--- Only first line will be presented here
4

1 に答える 1

3

文字列は、MIME ヘッダーのQuoted-printable形式を使用してエンコードされます。行が CRLF ( ) 行セパレーターで適切に区切られていれば、モジュールがこれを処理しますemail.headersubject\r\n

>>> subject = '''\
... =?UTF-8?B?15bXkNeqINeR15PXmden15Qg15HXodeZ16HXmdeqINeR15vXk9eZINec15TXkdeZ158g?=\r
...  =?UTF-8?B?157Xk9eV16Ig15TXp9eZ15PXldeTINeU15bXlCDXnNeQINei15XXkdeTINeQ150g15DXoNeZINeo15U=?=\r
...  =?UTF-8?B?16nXnSDXlNeo15HXlA==?='''
>>> from email.header import decode_header
>>> for part in decode_header(subject):
...     value = unicode(*part)
...     print part
... 
זאת בדיקה בסיסית בכדי להבין מדוע הקידוד הזה לא עובד אם אני רושם הרבה

件名 (キャリッジ リターン + 改行文字と先頭の空白を含む1 つの文字列) は、MIME 標準によって設定された厳密な行の長さの制限に適合するように、複数の行にまたがっています。

于 2013-05-13T09:55:06.083 に答える