Outlook MailItem.SaveAs保存非拉丁字符时乱码问题求助
解决Outlook .msg文件保存时非拉丁字符乱码问题
问题根源
你遇到的乱码问题本质是保存格式错误:olMSG是ANSI编码的MSG格式,仅支持系统默认代码页内的字符,希腊语这类非拉丁字符会被强制替换为问号。olMSGUnicode才是专为Unicode字符设计的保存类型,能完整保留所有非拉丁字符。
修复方案
将SaveAs方法的类型参数替换为Outlook.OlSaveAsType.olMSGUnicode,同时优化路径拼接方式避免潜在错误:
public void Package(Outlook.MailItem mailItem) { string path = Path.Combine(Path.GetTempPath(), "mail.msg"); try { // 使用Unicode编码的MSG格式保存,支持所有非拉丁字符 mailItem.SaveAs(path, Outlook.OlSaveAsType.olMSGUnicode); using (var fs = new FileStream(path, FileMode.Open)) { this.Content = new byte[fs.Length]; fs.Read(Content, 0, Content.Length); } } finally { File.Delete(path); } }
补充说明
olMSGUnicode对应的枚举值为3,Office 2007及以上版本的Outlook对象库均支持该枚举。- 读取字节流的逻辑无需修改,
FileStream按原始字节读取,不会破坏已保存的Unicode内容。 - 该格式不依赖系统区域编码,只要使用正确的保存类型,就能稳定支持希腊语等非拉丁字符。
内容的提问来源于stack exchange,提问作者VDU
相关产品推荐
相关产品推荐

