.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 に変換します。次に、バイトごとに16進数にエンコードする必要があります。
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 に答える