我要推出默认的电子邮件客户应用程序通过ShellExecute功能。

I.e。我写的东西,像这样:

ShellExecute(0,'mailto:example@example.com?subject=example&body=example',...);

我如何可以进行编码的非美国人物在主题和身体?

我不能使用的默认ANSI代码页,因为人物可以是任何东西:中国文字,西里尔字母或别的东西。

P.S.注:

  1. 我使用的ShellExecuteW功能。
  2. 离开主题和体"作为是"不会的工作(试用Windows Live邮件上的客户的windows7资和前景表在WinXP).
  3. 编码问题作为URLEncode(UTF8Encode(主题))将工作Windows Live邮件,但是不会的工作Outlook表达。
  4. URLEncode(UTF8Encode(身体))将不适用于客户。
有帮助吗?

解决方案

mailto:example@example.com?subject=example&body=%e5%85%ad

简短的回答是 没有.符必须百分比编码的定义 RFC3986 和它的前辈。 RFC2368 定义的结构mailto URI。

#include "windows.h"

int main() {
  ShellExecute(0, TEXT("open"),
    TEXT("mailto:example@example.com?subject=example&body=%e5%85%ad"),
    TEXT(""), NULL, SW_SHOWNORMAL);

  return 0;
}

身体在这种情况下是中日韩字U+516D(六)编码为UTF-8(E5 85 AD).这正常工作Mozilla Thunderbird(你可能需要安装额外的字体,如果它不)。

剩下的就看你的用户代理(客户邮件)解释URI。RFC3986任务UTF-8,但现有的规范没有。一个用户代理不能解释的数据是否正确,如果它预期RFC3986,一直没有更新或是保持向后兼容之前实现。

注: URLEncode 功能通常意味着HTML application/x-www-form-urlencoded 编码。这可能会引起空间字被替换为加符。

注2:我不前的状态 IRI 支持在窗外壳,但它可能是值得的期待。然而,一些人物在查询部分将仍然需要%的编码。

其他提示

解释的命令行为的发起程序。根据性质的安装的电子邮件的客户,可能或不可能得到你的Unicode支助(在一个或另一个不同形态或形式)。因此,有没有一个单一的配方。他们中的一些可能使用ANSI命令行(因为为什么不呢?), 他们中的一些可能尊重URLEncoded字,等等。

你最好的赌注是检测3-4受欢迎的邮寄者通过阅读登记册和定制你的命令行。非常不雅和不完整的设计,但没有别的可以做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top