Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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 2.7 字符编码:为什么我的电子邮件接收代码不能在PyQt4中运行?_Python 2.7_Character Encoding_Pyqt4 - Fatal编程技术网

Python 2.7 字符编码:为什么我的电子邮件接收代码不能在PyQt4中运行?

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_

我最近完成了一个垃圾邮件分类应用程序作为我的最终项目,现在我遇到了一个问题。 问题来自接收电子邮件的模块。我在一个.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_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