You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python读取文件的编码问题求助

解决Windows下Python读取Outlook .msg文件的UnicodeDecodeError问题

根本原因

Outlook导出的.msg文件不是纯文本格式,而是二进制OLE复合文档,包含邮件的结构、内容、附件等二进制数据。直接用open()以文本模式读取本质上是错误的——Linux上没报错只是巧合(默认编码或文件读取兼容未触发解码错误),但实际并未正确解析文件内容;Windows下触发UnicodeDecodeError是因为文件中存在UTF-8无法解码的二进制字节(比如0xe9)。

正确解决方案:使用专门的.msg文件解析库

不要尝试用文本编码方式读取,直接用针对.msg格式开发的Python库解析:

方案1:纯Python库 extract-msg(跨平台,无需Outlook客户端)

  1. 安装库:
pip install extract-msg
  1. 示例代码:
import extract_msg
import sys

# 解决Windows控制台中文乱码问题
sys.stdout.reconfigure(encoding='utf-8')

# 读取.msg文件
msg_file = "your_file.msg"
with extract_msg.Message(msg_file) as msg:
    print(f"主题: {msg.subject}")
    print(f"发件人: {msg.sender}")
    print(f"邮件内容:\n{msg.body}")
    # 如需提取附件:
    # for att in msg.attachments:
    #     att.save()

方案2:使用pywin32调用Outlook COM接口(仅Windows,需安装Outlook客户端)

  1. 安装库:
pip install pywin32
  1. 示例代码:
import win32com.client
import sys

# 解决Windows控制台中文乱码问题
sys.stdout.reconfigure(encoding='utf-8')

# 读取.msg文件
msg_path = r"C:\path\to\your_file.msg"
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = outlook.OpenSharedItem(msg_path)

print(f"主题: {msg.Subject}")
print(f"发件人: {msg.SenderName}")
print(f"邮件内容:\n{msg.Body}")

# 关闭邮件对象
msg.Close(0)

补充:关于控制台编码的问题

如果使用上述库解析后打印中文仍乱码,可通过以下方式解决:

  • 运行脚本前,在Windows命令行执行chcp 65001切换控制台编码为UTF-8
  • 或在Python脚本开头添加sys.stdout.reconfigure(encoding='utf-8')(Python 3.7+支持)

内容的提问来源于stack exchange,提问作者user1912445

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:33:15