Python 换行符消失
我遇到的问题是,当我从MicrosoftOutlookWebMail帐户下载电子邮件时,有时换行符会消失,导致一条长而不间断的行。但只是有时候。下面是我正在处理的示例: 从Microsoft Outlook Web App下载的原始邮件正文(包括美元符号,因为我在vim中设置了:开启列表): 狼吞虎咽$Python 换行符消失,python,vim,character-encoding,newline,imapclient,Python,Vim,Character Encoding,Newline,Imapclient,我遇到的问题是,当我从MicrosoftOutlookWebMail帐户下载电子邮件时,有时换行符会消失,导致一条长而不间断的行。但只是有时候。下面是我正在处理的示例: 从Microsoft Outlook Web App下载的原始邮件正文(包括美元符号,因为我在vim中设置了:开启列表): 狼吞虎咽$ 这是一条带有$ 多行$ $ 你好$ 我最终实际收到的消息体(在vim中也有:set list on): gobble这是一条多行的消息^M$ 你好^I^I^I^I^I=^M$ 显然,这里还有一些
这是一条带有$
多行$
$
你好$ 我最终实际收到的消息体(在vim中也有:set list on): gobble这是一条多行的消息^M$
你好^I^I^I^I^I=^M$ 显然,这里还有一些我也不明白的事情——制表符(^I)字符来自哪里?等号从哪里来 以下是进行下载的代码(使用python库IMAPClient):
文件是否有混合的行尾?答案似乎是肯定的。请先在文件上运行dos2unix,或者在vim中尝试。(或者在python中修复行尾)作为旁注,您几乎不需要(或不想)调用
foo.\uu str\uu();只需执行str(foo)
@FDinoff:如果您可以使用Python的通用换行符行为为您执行此操作,可能会更容易。我不确定在2.x中是否有一种简单的方法可以做到这一点;也许将字符串包装在io.StringIO
(而不是StringIO.StringIO
)中,然后将其拉出?但是,也许其他人的记忆力比我好。无论如何,这封邮件有没有可能有附件(或与MAPI相关的等效文件),Outlook正在下载邮件的HTML或RTF版本,然后进行明文处理,当您的代码正在下载纯文本版本时?@STN:可能值得检查Outlook是否正在通过MAPI、WebDAV/OWA或IMAP下载,和/或测试其他IMAP客户端。(对于简单的实验,您可以从Python stdlib中将一个与imaplib
放在一起,或者您可以从那里下载任何开源客户端。)这将排除脚本中另一行的任何内容。接下来,您可能希望在使用电子邮件重新解析数据之前,尝试按原样转储数据
,以缩小问题是在解析之前还是之后发生的范围。
## Connect, login and select the INBOX
server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)
select_info = server.select_folder('INBOX')
#Get messages since a certain time:
message_list = server.search(['SINCE %s' % cutoff.strftime('%d-%b-%Y')])
response = server.fetch(message_list, ['RFC822'])
for msgid, data in response.iteritems():
msg_string = data['RFC822'].__str__()
msg = email.message_from_string(msg_string)
payload = msg.get_payload()
body = payload
print body