首页 > 解决方案 > 在 python 3 中使用 win32api/com 模块时,有没有办法解决 unicode 问题?

问题描述

我环顾四周,还没有发现任何东西。我正在浏览收件箱中的电子邮件并检查特定的单词集。它适用于大多数电子邮件,但其中一些不解析。我检查了损坏的电子邮件。

print (msg.Body.encode('utf8'))

我的问题信息都以b'开头。像这样

b'\xe6\xa0\xbc\xe6\xb5\xb4\xe3\xb9\xac\xe6\xa0\xbc\xe6\x85\xa5\xe3\xb9\xa4\xe0\xa8\x8d\xe6\xb4\xbc\xe7\x91\xa5\xe2\x81\xa1\xe7\x91\x

我认为这迫使 python 将正文读取为字节,但我不确定。无论哪种方式在 b 之后,无论我尝试什么编码,除了垃圾文本我什么都没有。

我之前尝试过其他编码方法以及解码,但我只是得到了大量的属性错误。

import win32api
import win32com.client
import datetime
import os
import time


outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
dater = datetime.date.today() - datetime.timedelta(days = 1)
dater = str(dater.strftime("%m-%d-%Y")) 
print (dater)
#for folders in outlook.folders:
#    print(folders)

Receipt = outlook.folders[8]

print(Receipt)

Ritems = Receipt.folders["Inbox"]

Rmessage = Ritems.items

for msg in Rmessage:
    if (msg.Class == 46 and msg.CreationTime.strftime("%m-%d-%Y") == dater):
        print (msg.CreationTime)
        print (msg.Subject)
        print (msg.Body.encode('utf8'))

        print ('..............................')

最终结果是在控制台中打印出消息,或者至少给 Python 一种读取它的方法,这样我就可以在正文中找到我正在寻找的文本。

标签: pythonemailparsing

解决方案


问题中发布的字节文字是有效的 UTF-8。前两个字符是来自 CJK 统一表意文字块的 U+683C 和 U+6D74,U+4E00 - U+9FFF。

由于您不知道源编码,因此无法完全确定它,但很可能电子邮件正文只是以 UTF-8 编码的汉字符(确定 Python 中文本的编码)。如果您无法正确看到 UTF-8 字符,您应该检查您的终端或显示字符集。

也就是说,您应该正确掌握字符表示的基础知识。随机编码或解码几乎不能解决任何问题。我建议您先阅读Spolsky对 Unicode 的介绍,然后再转到Batchelder on Unicode in Python。


推荐阅读