Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Mime - Fatal编程技术网

Python 在'之前添加角括号;从';体内

Python 在'之前添加角括号;从';体内,python,mime,Python,Mime,我被Python MIME库的一些非常奇怪的小故障所困扰。出于某种原因,当消息包含来自某个的字符串时,将其打印为字符串将产生来自某个的> 我编写了这个最小的测试用例,它显示了问题: from email import charset from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText charset.add_charset('utf-8', charset.SHORTEST)

我被Python MIME库的一些非常奇怪的小故障所困扰。出于某种原因,当消息包含来自某个的字符串时,将其打印为字符串将产生来自某个的
>

我编写了这个最小的测试用例,它显示了问题:

from email import charset
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

charset.add_charset('utf-8', charset.SHORTEST)

msg = MIMEMultipart()
msg['From'] = 'test@test.com'
msg.attach(MIMEText('From whatever', "plain", "utf-8"))

print msg.as_string()
我得到的输出如下:

内容类型:多部分/混合;边界=“=========================1971947716==”
MIME版本:1.0
发件人:test@test.com
--===============1971947716==
内容类型:文本/纯文本;charset=“utf-8”
MIME版本:1.0
内容传输编码:7bit
>从哪来的
--===============1971947716==--

显然,这是由
add\u charset
调用引起的,但我不认为这会导致一个与UTF8和charset完全无关的问题。

它与编码无关,在Python 2.7和Python 3.4之间是不同的。Python3.4没有出现这个问题

在python 2.7中:

print MIMEText('From foo')
给予

From nobody Wed Jul 02 12:17:18 2014
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

>From foo

我认为原因在于,在传统的mbox格式中,以
From
开头的一行(而不是
From:
表示头)是新消息开头的标记(至少在FreeBSD 9中仍然如此)。而邮递员过去常常从foo中以
>的形式转义它。我想email模块这样做是为了在2.7中兼容,您使用的是什么Python版本?我无法用Python2.7或3.3复制这一点-对我来说,文本部分使用
base64
进行编码(正确),而不是
7bit
。你能试试这个吗:
import email
text=MIMEText('From which',“plain”,“utf-8”)
电子邮件。编码器。encode\u base64(text)
msg.attach(text)
print msg.as_string()
(我省略了您的其余代码)通过编辑,我现在可以用2.7.5重新创建,但无法用3.4重新创建(在3.4中,用“从任何内容”看起来都很好)。是的,通过编辑,您现在正在手动损坏字符集。有关默认设置,请参见地图。在这个类中,有一个特定的注释是“body_编码不允许使用Charset.SHORTEST”。我不能确切地说这种行为是由明显不受支持(无效?)的字符集定义引起的,但它似乎以某种方式触发了
From
mangling“功能”:请参阅