c++ UTF8 的 string 转为 Unicode 的 wstring

概述

在用 rapidjson 解析本地 json 文件的时候,发现中文字符显示乱码,json 文件是用 UTF8 编码的,VS 项目所使用的是 Unicode 字符集,因此需要将在 json 中获取到的 string 转为 wstring

相关函数

int MultiByteToWideChar(
  UINT CodePage,
  DWORD dwFlags,
  LPCSTR lpMultiByteStr,
  int cbMultiByte,
  LPWSTR lpWideCharStr,
  int cchWideChar
);

功能:映射一个字符串到一个宽字符(unicode)的字符串。

  • CodePage 指定需要转换的字符集
    • CP_UTF8 使用 UTF8 转换
    • CP_ACP 使用 ANSI 转换
  • lpMultiByteStr 指向要转换的字符串
  • cbMultiByte lpMultiByteStr 参数的字节大小,如果将值设为 -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

你可能感兴趣的:(c++ UTF8 的 string 转为 Unicode 的 wstring)