2

.net にはUri.EscapeDataString、Unicode のエンコードを行うものがあります。「Ää」を「%C3%84%C3%A4」に変換します。Uri.EscapeDataStringCLIに相当するものは何ですか。私のコードは VC++ であり、Uri.EscapeDataString を使用したくありません。でやってみましたWideCharToMultiByte(...)。しかし、これは同じ結果を返していません。CLIで使用できるAPIは何ですか、またはCLIで同じ結果を得るために他の方法はありますか?

4

1 に答える 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 に答える