为什么Msgbox会显示问号而不是文本正文中出现的空格?

时间:2018-04-10 00:56:52

标签: vba encoding outlook outlook-vba decoding

dim oEmail As Outlook.mailitem
dim textbody as string
textbody = oEmail.body
msgbox textbody

某些传入邮件(国外和国内)内容在Outlook中显示正常,但是当我运行上述宏程序时,消息框(可变文本体)显示文字之间的问号,而不是空格。

举例说明,

  1. Outlook Mail读取:

      

    你好,你好吗?

  2. Msgbox显示:

      

    您好?有?怎么样?好吗?你吗?在做什么?

  3. 似乎字符未正确存储在变量中。 以下测试代码对于第一个instr()导致“0”,而后一个代码部分导致“> 0”。似乎文本正文中的问号阻止正确检测字符串中的连续匹配单词。

    if InStr(1, LCase$(textbody), "how are you") > 0 Then
    
       msgbox "found 3 consecutive matching words in string"
    
    end if
    
    
    if InStr(1, LCase$(textbody), "how") > 0 Then
    
       msgbox "found a word match in string"
    
    end if
    

1 个答案:

答案 0 :(得分:1)

如果没有样本,我无法给出绝对答案,但很可能问号是将Unicode字符(因此大部分是您的外国字符)表示为?,因为 Unicode无法呈现MsgBox 使用的字体。

例如,包含以下内容的电子邮件:

Smiley Face [☺] Smile in Chinese [微笑]

...将在MsgBox中呈现为:

Smiley Face [?] Smile in Chinese [??]

如果您尝试使用Debug.Print在即时窗口中显示它,也会如此。

但是,正确的字符存储在String中。例如,如果您以编程方式将值放入Excel单元格中,则可能会正确显示:

img

话虽这么说,我确定Windows / Office的区域版本可以正确显示Unicode字符,否则外国符号永远不会显示在消息框中。

解决方法可能是将默认消息框字体更改为支持Unicode的字体。

scr

这篇文章也可能有所帮助: