Ale*_*lex 3 mailto unicode winapi
我想通过ShellExecute函数启动默认的电子邮件客户端应用程序.
即我写这样的东西:
ShellExecute(0,'mailto:example@example.com?subject = example&body = example',...);
如何在主题和正文中编码非美国字符?
我不能使用默认的ANSI代码页,因为字符可以是任何东西:汉字,西里尔字母或其他东西.
PS备注:
的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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,身体是编码为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支持状态,但它可能值得研究.但是,查询部分中的某些字符仍需要进行百分比编码.