c++UTF 8のstringからUnicodeのwstringへ

1217 ワード

概要rapidjsonでローカルjsonファイルを解析したところ、中国語文字が文字化けして表示され、jsonファイルはUTF8で符号化され、VSプロジェクトではUnicode文字セットが使用されているため、jsonで取得したstringwstringに変換する必要がある.
そうかんかんすう
int MultiByteToWideChar(
  UINT CodePage,
  DWORD dwFlags,
  LPCSTR lpMultiByteStr,
  int cbMultiByte,
  LPWSTR lpWideCharStr,
  int cchWideChar
);

機能:文字列をワイド文字(unicode)の文字列にマッピングします.
  • CodePage変換する文字セットを指定
  • CP_UTF 8はUTF 8変換
  • を用いる.
  • CP_ACPはANSI変換
  • を用いる
  • lpMultiByteStr変換する文字列
  • を指す.
  • cbMultiBytelpMultiByteStrパラメータのバイトサイズは、値を-1に設定するとnullで文字列が終了し、自動的に長さが計算されます.
  • lpWideCharStr変換後の文字列を受信バッファへのポインタ
  • cchWideCharは、パラメータlpWideCharStrによって指定されるバッファの幅文字数を指定します.この値が0の場合、関数はバッファに必要な幅文字数を返します.

  • コード#コード#
    wstring UTF8ToUnicode(const string &s)
    {
        wstring result;
        
        //            
        int length = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0);
        
        wchar_t * buffer = new wchar_t[length];
        ::MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, buffer, length);
        result = buffer;
        
        delete[] buffer;
        return result;
    }
    

    参考資料
  • MultiByteToWideChar