我如何HTML-/URL-编码包含Unicode字符的std :: wstring?

Oli*_*aur 5 html c++ unicode url utf-8

我还有一个问题.如果我有一个std :: wstring看起来像这样:

ドイツ语で検索していてこちらのサイトにたどり着きました.

我怎么可能将它编码为URL-Encoded(%nn,n = 0-9,af):

%E3%83%89%E3%82%A4%E3%83%84%E8%AA%9E%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%97%E3 %81%A6%E3%81%84%E3%81%A6%E3%81%93%E3%81%A1%E3%82%89%E3%81%AE%E3%82%B5%E3%82 %A4%E3%83%88%E3%81%AB%E3%81%9F%E3%81%A9%E3%82%8A%E7%9D%80%E3%81%8D%E3%81%BE %E3%81%97%E3%81%9F%E3%80%82

...还有HTML编码(&#nnn(nn);,n = 0-9(?)):

ドイツ语で検索していてこちらのサイトにたどり着きました.

请帮助我,因为我现在完全失去了,甚至不知道从哪里开始.顺便说一句,性能对我来说并不重要.

提前致谢!

Gia*_*nni 1

您会看到,在将 char 转换为 URL 转义序列之前,必须将 wstring* 转换为用于 URL 的 ISO-Latin 字符集。 ICU可能是一个很好的起点,您可以将 wstring 传递给它并获取 ISO-Lantin 序列。然后,只需迭代生成的字符并将它们转换为转义序列:

std::stringstream URL;
URL << std::hex;
for(auto it = myWString.begin(); it != myWString.end(); ++it)
   URL << '%' << std::setfill('0') << std::setw(2) << (int)*it;
Run Code Online (Sandbox Code Playgroud)

请查看此处,了解有关如何格式化字符串的更多信息。

* 我假设你的 wstring 是 UTF-16,通常情况就是这样,尽管你没有指定

也可能有帮助。