在 .net 中,我们Uri.EscapeDataString
对 unicode 进行了编码。它将“Ää”转换为“%C3%84%C3%A4”。Uri.EscapeDataString
CLI中的等价物是什么。我的代码在 VC++ 中,我不想使用 Uri.EscapeDataString。我试过了WideCharToMultiByte(...)
。但这不会返回相同的结果。我可以在 CLI 中使用什么 API 或任何其他方式可以在 CLI 中获得相同的结果?
问问题
639 次
1 回答
0
最后在同事的帮助下得到了答案。首先使用 WideCharToMultiByte(..) 将 Widechar 转换为 multibye。即将unicode转换为utf-8。然后我们必须逐字节将其编码为十六进制。
string methodTOHex()
{
string s = "Ä";
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring temp(buf);
delete[] buf;
LPCWSTR input = temp.c_str();
int cbNeeded = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL);
if (cbNeeded > 0) {
char *utf8 = new char[cbNeeded];
if (WideCharToMultiByte(CP_UTF8, 0, input, -1, utf8, cbNeeded, NULL, NULL) != 0) {
for (char *p = utf8; *p; *p++) {
char onehex[5];
_snprintf(onehex, sizeof(onehex), "%%%02.2X", (unsigned char)*p);
output += onehex;
}
}
delete[] utf8;
}
return output;
}
于 2013-03-13T06:58:30.947 回答