【问题标题】:Email item replaces russian text with question marks电子邮件项目用问号替换俄语文本
【发布时间】:2019-06-23 14:43:18
【问题描述】:

当我在主题/正文中传递俄语文本时。打开的电子邮件中的文本将替换为问号。

我正在使用代码项目参考中的 MAPI https://www.codeproject.com/Articles/17561/Programmatically-adding-attachments-to-emails-in-C

我尝试使用 mailto,它会在我传递给它时设置文本,但 我无法使用 mailto 添加附件

    string mailto = string.Format("mailto:?cc={0}&Subject={1}&Body={2}&attachment={3}", ccEmailId, subject, body, attachmentPath);
    mailto = Uri.EscapeUriString(mailto);
    Process proc = Process.Start(mailto);

通过一些研究,我发现使用 Outlook 互操作可能是一种解决方法,但我不确定最终用户计算机上将哪个电子邮件客户端设置为默认值。

开发机器上的 Outlook 设置: !https://ibb.co/b5XK5rV

有没有其他方法可以让我在邮件消息上设置附件并启动电子邮件对话,同时以任何语言传递不会转换为问号的文本(??????)。

【问题讨论】:

  • 这可能是由于编码,因为西欧可能不支持俄语字符
  • 我尝试将编码更改为 utf-8,但它具有相同的行为..显示俄语文本的问号
  • 你传递给mapi的字符串是什么编码的?有一些“奇怪”的俄罗斯编码可能需要先转换
  • 我也尝试安装俄语,设置为默认编辑和显示语言..仍然显示??对于从 MAPI 添加的俄语文本
  • 我没有对字符串进行任何编码,我从另一个服务接收字符串消息并直接传递给 MAPI。 mapimessage 类如下:[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public class MapiMessage { } @SebastianL

标签: c# outlook


【解决方案1】:

所有非 ASCII 和 Unicode 字符都必须经过 url 编码:

mailto:test@example.com?Subject=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82

【讨论】:

  • 使用 mailto 我可以在不使用任何编码的情况下看到俄语文本。 mailto 的问题是我无法在邮件项目上设置任何附件。
  • 您不能使用 mailto 协议添加附件。
【解决方案2】:

由于外来字符,您可能希望使用 UTF 16

这里是所有角色的完整列表。

https://www.fileformat.info/info/charset/UTF-16/list.htm

【讨论】:

  • outlook 没有使用 UTF-16 编码的任何选项。我正在使用 Outlook 2016
  • 使用mailto:我可以在邮件正文中放入俄语字符,我认为这仅与mapi有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2019-11-25
  • 1970-01-01
  • 2011-07-08
  • 2017-12-11
  • 2012-07-13
相关资源
最近更新 更多