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

Vba 为什么Msgbox显示问号而不是文本正文中的空格?,vba,encoding,outlook,decoding,Vba,Encoding,Outlook,Decoding,一些外来邮件和国内邮件的内容在Outlook中显示良好,但当我运行上述宏程序时,消息框变量textbody显示的文本在单词之间带有问号,而不是空格 举例说明, Outlook邮件内容如下: 你好,你好吗 Msgbox显示: 喂?那里?你好吗?你在干什么 字符似乎没有正确地存储在变量中。 以下测试代码的第一个instr结果为0,而后一个代码部分的结果为>0。文本正文中的问号似乎妨碍了正确检测字符串中的连续匹配词 dim oEmail As Outlook.mailitem dim textbody

一些外来邮件和国内邮件的内容在Outlook中显示良好,但当我运行上述宏程序时,消息框变量textbody显示的文本在单词之间带有问号,而不是空格

举例说明,

Outlook邮件内容如下:

你好,你好吗

Msgbox显示:

喂?那里?你好吗?你在干什么

字符似乎没有正确地存储在变量中。 以下测试代码的第一个instr结果为0,而后一个代码部分的结果为>0。文本正文中的问号似乎妨碍了正确检测字符串中的连续匹配词

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

如果没有示例,我无法给出一个绝对的答案,但最有可能的是问号代表的是Unicode字符,所以大部分是外来字符?因为Unicode不能以MsgBox使用的字体呈现

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

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
…将在MsgBox中呈现为:

如果尝试使用Debug.Print在即时窗口中显示它,也会出现同样的情况

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

话虽如此,我确信Windows/Office的区域版本可以正确显示Unicode字符,否则消息框中永远不会显示外来符号

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

这篇文章也可能有帮助:


谢谢你的评论。“但我恐怕这不是一个展示问题。”巴洛克-我的例子对我来说很好。MsgBox至少在这里不能显示Unicode。如果这不是问题所在,那么你的问题措辞错误。您是否尝试过我的任何示例,例如以编程方式将字符放入Excel单元格时如何正确显示字符?如果字符未按您的要求显示,根据定义,这是一个显示问题;我怀疑你没有听我的解释。无论出于何种原因,问号用于代替无法显示的字符;这是标准。基本上,问题是你使用的是MsgBox。别忘了✓ 接受一个有助于解决问题的答案…你将获得+2声誉,答案作者获得+15声誉。一旦你达到15声誉,你也可以▲ 向上投票任何有帮助的答案,这也会奖励作者并使堆栈溢出社区整体受益!
Smiley Face [☺] Smile in Chinese [微笑]
Smiley Face [?] Smile in Chinese [??]