nlohmann::json中有中文时调用dump转string抛出异常的问题
问题描述
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之后的结果,是乱码,但是上传到服务器,查看的中文时正常的。