我想通过ShellExecute函数启动默认的电子邮件客户端应用程序。
即。我写的是这样的:
ShellExecute(0,'mailto:example@example.com?subject = example& body = example',...);
如何在主题和正文中编码非美国字符?
我无法使用默认的ANSI代码页,因为字符可以是任何字符:中文字符,西里尔字母或其他内容。
P.S。注意:
答案 0 :(得分:6)
的mailto:?example@example.com受试者=示例&安培;主体=%E5%85%广告
简短的回答是否。字符必须按RFC 3986及其前身定义的百分比编码。 RFC 2368定义了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;
}
在这种情况下,身体是编码为UTF-8(E5 85 AD
)的CJK字符U + 516D(六)。这适用于Mozilla Thunderbird(如果没有,可能需要安装其他字体)。
其余部分取决于您的用户代理(邮件客户端)如何解释URI。 RFC 3986要求UTF-8,但先前的规范没有。如果用户代理在RFC 3986之前更新,尚未更新或与以前的实现保持向后兼容性,则用户代理可能无法正确解释数据。
注意:URLEncode
函数通常表示HTML application/x-www-form-urlencoded
编码。这可能会导致空格字符被加号字符替换。
注意2:我目前不了解Windows shell中IRI支持的状态,但它可能值得研究。但是,查询部分中的某些字符仍需要进行百分比编码。
答案 1 :(得分:2)
命令行的解释取决于已启动的程序。根据已安装的电子邮件客户端的性质,您可能会或可能不会获得Unicode支持(以一种或另一种不同的形式或形式)。所以没有单一的食谱。其中一些可能使用ANSI命令行(因为为什么不?),其中一些可能会尊重URLEncoded字符等。
最好的办法是通过阅读注册表来检测3-4个热门邮件,并相应地自定义命令行。非常不优雅,设计不完整,但你无能为力。