问题描述
Winodows下C++开发想使用一个json库,使用的nlohmann::json,但是遇到json中使用中文时,转成string,会抛出异常。
nlohmann::json contentJson;contentJson["chinese"] ="哈哈哈";std::string test = contentJson.dump();
解决方案
先将GBK编码的中文转成utf8编码,再赋值给json就可以了。
//转码 GBK编码转成UTF8编码
static std::string GBKTOUTF8(const std::string& strGBK)
{std::string strUtf8;int len = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);wchar_t* wszUtf8 = new wchar_t[len];memset(wszUtf8, 0, len);MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, wszUtf8, len);len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);char* szUtf8 = new char[len + 1];memset(szUtf8, 0, len + 1);WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL, NULL);strUtf8 = szUtf8;delete[] szUtf8;delete[] wszUtf8;return strUtf8;
}//测试
nlohmann::json contentJson;
std::string temp = "哈哈哈";
contentJson["chinese"] = GBKTOUTF8(temp);
std::string test = contentJson.dump();
需要注意的是,这里在windows Vusial Studio debug模式下,看到GBK转成utf8之后的结果,是乱码,但是上传到服务器,查看的中文时正常的。