JSON解析生僻字

JSON解析生僻字

  1. 使用工程相关信息
    jsoncpp 库
    vs2015
  2. 不能解析的文字列表:
    乗 俓 僜 刓 匼 哱 圽 塡 奬 媆 峔 嶾 廫 慭 怽 揬 昞 朶 梊 榎 橽 歕 沑 漒 瀄 焅 燶 猏 玕 琝 甛 璡 痋 盶 癨 瞈 砛 碶 穃 竆 筡
    篭 糪 絓 綷 縗 繺 羂 耚 肻 腬 臶 臷 芢 蒤 薥 蚛 蝄 蟎 衆 蟎 裓
    覾 譢 豛 赲 踈 躙 輁 郳 醆 鈂 鉢 鎈 鏫 閈 闬 隲 頫 颸 餦 馶 骪
    鯸 鮘 鳿 鵟 鸤 黒 齖
  3. 原因
    生僻字 3个字节表示一个中文字符,json中解析一般都是2个字节表示一个中文字符。
    json解析生僻字,会多出一个非法字符 \
  4. 解决思路
    将字符格式进行转化,先将字符gbk转化为utf8,然后将得到的字符串转化为gbk

5.核心代码

std::string GbkToUtf8(const std::string &strGBK)
{
	std::string strOutUTF8 = "";
	WCHAR *str1;
	int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
	str1 = new WCHAR[n];
	MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
	n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
	char *str2 = new char[n];

	WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
	strOutUTF8 = str2;
	delete[]str1;
	str1 = NULL;
	delete[]str2;
	str2 = NULL;
	return strOutUTF8;
}

// UTF-8转为GBK2312 [1/18/2017/shike]
std::string UtfToGbk(const std::string &utf8)
{
	int len = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len + 1];
	memset(wstr, 0, len + 1);
	MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, wstr, len);
	len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
	char* str = new char[len + 1];
	memset(str, 0, len + 1);
	WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
	if (wstr) delete[] wstr;
	return str;
}

相关代码:https://download.csdn.net/download/qq_40501206/62368285

你可能感兴趣的:(C++,json,mfc)