Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 换行符消失_Python_Vim_Character Encoding_Newline_Imapclient - Fatal编程技术网

Python 换行符消失

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$ 显然,这里还有一些

我遇到的问题是,当我从MicrosoftOutlookWebMail帐户下载电子邮件时,有时换行符会消失,导致一条长而不间断的行。但只是有时候。下面是我正在处理的示例:

从Microsoft Outlook Web App下载的原始邮件正文(包括美元符号,因为我在vim中设置了:开启列表):

狼吞虎咽$
这是一条带有$
多行$
$
你好$

我最终实际收到的消息体(在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