python如何将str转换为unicode(波斯语)?

时间:2014-08-06 19:44:02

标签: python unicode utf-8 decode persian

此字符串是邮件的主题。我用imaplib得到这个字符串。 这个字符串的类型是" str"。

谢谢你!

#-*- coding: utf-8 -*-
import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4('imap.gmail.com')
conn.login('myuser', 'my_pass')
conn.select()
conn.search(None, 'ALL')  # returns a nice list of messages...

data = conn.fetch(1, '(BODY[HEADER])')

header_data = data[1][0][1]

parser = HeaderParser()
msg = parser.parsestr(header_data)
print repr(msg['subject'].decode('utf-8'))

结果:

u'=?UTF-8?B?V2VsY29tZSB0byBBdGxhc01haWw=?='

2 个答案:

答案 0 :(得分:0)

使用email.header包中的decode_headermake_header函数处理标题,然后将标题对象转换为unicode:

from email.header import make_header, decode_header
header = make_header(decode_header(msg['subject']))
unicode_header = unicode(header)
print repr(unicode_header)  # prints: u'Welcome to AtlasMail'

答案 1 :(得分:-1)

电子邮件主题中非ascii特征的编码在RFC-1342中描述 - 正如你在那里看到的那样,你的utf-8字节在这种情况下是64位编码。

所以,要真正阅读这个,你可以做点什么:

import base64, quopri
try:
    encoding, enc_type, subject = msg["subject"].split("?", 2)
except ValueError:
    subject = msg["subject"].decode("utf-8")
    enc_type = "N/A"
if enc_type == "B":
    subject = base64.decodestring(subject).decode(encoding.lower())
elif enc_type == "Q":
    subject = quopri.decodestring(subject).decode(encoding.lower())