我在 Windows 10 下使用 Outlook 作为我的电子邮件客户端,并尝试使用 RDCOMClient 库来处理一些电子邮件。有些电子邮件是俄语的,我无法以可用的格式输出俄语部分。现在,我只关注主题行。当我提取该行并将其打印出来时,除了主题中的几个拉丁字符外,我只得到问号。我尝试设置编码并使用 iconv,但没有成功。但 iconv 确实提供了一个有用的线索。根据我下面显示原始字符的可重现示例给出:
iconv(SUBJECT, toRaw=T)
[1] 53 74 61 63 6b 4f 76 65 72 66 6c 6f 77 54 65 73 74 4d 65 73 73 61 67 65 3a
[26] 20 3f 3f 3f 3f 3f 3f 3f 3f 20 3f 3f 3f 3f 3f 3f 3f 3f 3f
最后所有的3f?那是问号的代码。RDCOMClient 实际上是返回 ??? 从 Outlook。这不是 R 内部的一些编码问题。
我查看了许多关于 SO 的 RDCOMClient 帖子,但没有看到任何处理此问题的内容。
RDCOMClient<->Outlook 连接是否刚刚断开?或者有什么办法可以解决这个问题?
尝试可重现的示例
由于我们正在讨论访问电子邮件,我不知道如何制作一个非常简单的可重现示例,但这里有一种可重现的方法来测试它。当然,您必须在 Windows 上安装 Outlook 才能做到这一点。
给自己发一封主题为:StackOverflowTestMessage: Тестовое сообщение
R 代码 我们需要先找到邮箱。大多数代码都是这样做的。然后我们检查主题。
## Connect to Outlook
OutApp <- COMCreate("Outlook.Application")
outlookNameSpace = OutApp$GetNameSpace("MAPI")
## Find the Inbox
INBOX = outlookNameSpace$GetDefaultFolder(6)
INBOX$Name() ## Confirm
emails <- INBOX$Items
## Find the relevant email
NumEmail = emails()$Count()
MessageNumber = 0
for(i in NumEmail:1) {
SUBJ = emails(i)$Subject()
if(grepl("StackOverflowTestMessage", SUBJ)) {
MessageNumber = i
break()
}
}
## Now try to get the subject line
SUBJECT = emails(MessageNumber)$Subject()
Encoding(SUBJECT) = 'UTF-8'
SUBJECT
[1] "StackOverflowTestMessage: ???????? ?????????"
iconv(SUBJECT, toRaw=T)
[[1]]
[1] 53 74 61 63 6b 4f 76 65 72 66 6c 6f 77 54 65 73 74 4d 65 73 73 61 67 65 3a
[26] 20 3f 3f 3f 3f 3f 3f 3f 3f 20 3f 3f 3f 3f 3f 3f 3f 3f 3f```