首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Outlook ReportItem.Body返回混乱的编码

Outlook ReportItem.Body返回混乱的编码
EN

Stack Overflow用户
提问于 2015-03-13 19:20:43
回答 4查看 3.4K关注 0票数 6

如果某些用户自动使用Outlook客户端来查看共享收件箱中的回退/ReportItems,而不是像文档所示返回消息的明文,那么就会有一个unicode字符串被解析为UTF-8字符串,因此它看起来像中文。

我可以通过一些代码来克服这一点,但另一个问题是,对于所有访问该收件箱的用户来说,Outlook中也会发生这种更改。在Outlook中查看的消息本身显示为中文字符--原来的unicode html被解析为UTF-8。

我们使用常规方法访问报表项:

代码语言:javascript
复制
For Counter as Integer = Inbox.Items.Count To 1 Step -1
    Dim Report As Outlook.ReportItem = Inbox.Items(Counter)
    Dim Body As String = Report.Body

最后一行是在VBA中获取乱码文本的地方,它试图将其解析为ASCII,并返回一个大块"?“。在.Net中,它返回解析为UTF-8的值,我们得到显示为中文的字符。在任何一种情况下,收件箱中的报表项将开始显示为中文字符,并将继续用于该收件箱的所有用户。

EN

回答 4

Stack Overflow用户

发布于 2015-04-14 04:41:07

我刚刚在Outlook中的VBA功能中出现了这种情况,它处理电子邮件,为订单反弹,并将这些订单标记为需要注意。outlook中的原始电子邮件看上去很好,但当我试图处理它时,这些字符更改为中文,Report.Body只显示问号。

我发现使用StrConv转换为Unicode可以获得正确的正文内容以供处理。

代码语言:javascript
复制
Dim strBody as String
strBody = StrConv(Report.Body, vbUnicode)
票数 8
EN

Stack Overflow用户

发布于 2015-03-14 18:07:09

您确定Inbox.Items(计数器)调用返回ReportItem类的实例吗?您有机会检查MessageClass属性吗?

您很可能尝试将MailItem类的实例强制转换为ReportItem类。是这样吗?

此外,我建议在运行时使用任何低级属性查看器(如MFCMAPI或OutlookSpy )来观察属性。你看到“中国”字了吗?

票数 0
EN

Stack Overflow用户

发布于 2020-09-02 21:49:43

我偶然发现了这个问题,我编写了一个函数来解决这个问题。我想我应该在这里分享一下,以防对其他人有用。

代码语言:javascript
复制
Private Sub Example()
    Dim Item As Object
    
    Set Item = Application.ActiveExplorer.Selection(1)
    
    Debug.Print ItemBody(Item)
End Sub

Public Function ItemBody(Item As Variant) As String
On Error Resume Next
    If TypeName(Item) = "ReportItem" Then
        With Item.GetInspector
            ItemBody = .WordEditor.Content
            .Close 1
        End With
    Else
        ItemBody = Item.Body
    End If
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29040321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档