Python 2.7 字符编码:为什么我的电子邮件接收代码不能在PyQt4中运行?
我最近完成了一个垃圾邮件分类应用程序作为我的最终项目,现在我遇到了一个问题。 问题来自接收电子邮件的模块。我在一个.py文件中编写了测试代码,效果非常好。代码如下:Python 2.7 字符编码:为什么我的电子邮件接收代码不能在PyQt4中运行?,python-2.7,character-encoding,pyqt4,Python 2.7,Character Encoding,Pyqt4,我最近完成了一个垃圾邮件分类应用程序作为我的最终项目,现在我遇到了一个问题。 问题来自接收电子邮件的模块。我在一个.py文件中编写了测试代码,效果非常好。代码如下: #!/usr/bin/env python # coding=utf-8 import poplib from email import parser host = 'pop.qq.com' username = 'xxxxx@qq.com' password = 'xxxxxxxxxxxxx' pop_
#!/usr/bin/env python
# coding=utf-8
import poplib
from email import parser
host = 'pop.qq.com'
username = 'xxxxx@qq.com'
password = 'xxxxxxxxxxxxx'
pop_conn = poplib.POP3_SSL(host)
pop_conn.user(username)
pop_conn.pass_(password)
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#print messages
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
i = 0
for message in messages:
i = i + 1
mailName = "mail"+str(i)
f = open(mailName + '.log', 'w');
print >> f, "Date: ", message["Date"]
print >> f, "From: ", message["From"]
print >> f, "To: ", message["To"]
print >> f, "Subject: ", message["Subject"]
print >> f, "Data: "
for part in message.walk():
contentType = part.get_content_type()
if contentType == 'text/plain' :
data = part.get_payload(decode=True)
print >> f, data
f.close()
pop_conn.quit()
但当我尝试将完全相同的代码移植到我的PyQt4应用程序时,问题出现在这一行:
messages = ["\n".join(mssg[1]) for mssg in messages]
这就是问题所在:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4:ordinal not in range(128)
mssg[1]是一个包含每行邮件的列表。我猜这是因为邮件中的文本是由“utf-8”或“gbk”编码的,而默认的“ascii”无法解码。所以我试着这样写代码:
messages = ["\n".join([m.decode("utf-8") for m in mssg[1]]) for mssg in messages]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 7
问题是这样的:
messages = ["\n".join([m.decode("utf-8") for m in mssg[1]]) for mssg in messages]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 7
我使用PythonChardet模块检测电子邮件文本的编码,结果是“ascii”。现在我真的很困惑。为什么相同的代码不能在我的小应用程序上运行?真正的问题是什么?我如何解决?非常感谢您的帮助。我最终通过接收.py文件中的电子邮件并使用我的应用程序导入该文件解决了这个问题。这在其他情况下可能没有用处,因为我实际上没有解决字符编码问题。当我实现我的应用程序时,我遇到了很多编码问题,这很烦人。因此,我猜这是由于我的邮件中的一些不规则文本(可能是一些图片)造成的,如下图所示:
当我试图在屏幕上打印我的一些电子邮件数据时,显示了这一点。然而,我仍然不知道为什么它不能在我的应用程序中运行,尽管它在一个简单的文件中运行良好。字符编码问题非常烦人,也许我还有很长的路要走。:-D我最终通过接收.py文件中的电子邮件并使用我的应用程序导入该文件解决了这个问题。这在其他情况下可能没有用处,因为我实际上没有解决字符编码问题。当我实现我的应用程序时,我遇到了很多编码问题,这很烦人。因此,我猜这是由于我的邮件中的一些不规则文本(可能是一些图片)造成的,如下图所示:
当我试图在屏幕上打印我的一些电子邮件数据时,显示了这一点。然而,我仍然不知道为什么它不能在我的应用程序中运行,尽管它在一个简单的文件中运行良好。字符编码问题很烦人,也许我还有很长的路要走。:-D请添加
代码>图像标签前的字符以正确显示。thx~我没有足够的声誉来发布图像,因此我键入错误消息:-请添加代码>图像标签前的字符以正确显示。thx~我没有足够的声誉发布图像,因此我键入错误消息:-D