gpt4 book ai didi

winapi - 如何在 "mailto"协议(protocol)中使用 unicode?

转载 作者:行者123 更新时间:2023-12-03 07:44:08 28 4
gpt4 key购买 nike

我想通过 ShellExecute 函数启动默认电子邮件客户端应用程序。

即我写的是这样的:

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

如何对主题和正文中的非美国字符进行编码?

我无法使用默认的 ANSI 代码页,因为字符可以是任何内容:中文字符、西里尔字母或其他字符。

附注备注:

  1. 我正在使用 ShellExecuteW 函数。
  2. “按原样”保留主题和正文是行不通的(已在 Win7 上使用 Windows Live Mail 客户端和 WinXP 上使用 Outlook Express 进行测试)。
  3. 将主题编码为 URLEncode(UTF8Encode(Subject)) 适用于 Windows Live Mail,但不适用于 Outlook Express。
  4. URLEncode(UTF8Encode(Body)) 不适用于两个客户端。

最佳答案

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

简短的回答是。字符必须按照 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:我不了解 IRI 的最新状态Windows shell 中支持,但可能值得研究一下。但是,查询部分中的某些字符仍需要进行百分比编码。

关于winapi - 如何在 "mailto"协议(protocol)中使用 unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177370/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com