【发布时间】:2017-12-04 10:58:34
【问题描述】:
我无法用 boost::property_tree::read_json 解决我的问题。我有 MBCS 编码(多字节字符集)的 MFC 项目。在使用 ä 字符读取数据时出现错误。这是我的例子:
namespace pt = boost::property_tree;
pt::ptree rootRequest;
//Save data in property tree
rootRequest.put("test", "Test ä");
//create stringstream
std::stringstream ss;
//Write rootRequest to stringstream
try
{
pt::write_json(ss, rootRequest);
}
catch (std::exception const &e)
{
TRACE("Error: [%s]\n", e.what());
}
//Get string from stringstream
std::string strRequest = ss.str();
TRACE("data: [%s]\n", CString(strRequest.c_str()));
//Clear stringstream
ss.str(std::string());
//Sate data to stringstream
ss << strRequest;
//Save string data in ptree value
pt::ptree rootResponse;
try
{
pt::read_json(ss, rootResponse); //Here I'm getting error
}
catch (std::exception const &e)
{
TRACE("Error: [%s]\n", e.what());
}
我收到以下异常:
<unspecified file>(2): invalid code sequence
读取此类数据的正确方法是什么?我希望有人可以帮助我解决这个问题。我需要将数据保存在string 中,然后再将其读到stringstream。此部分无法更改。
【问题讨论】:
-
不要使用 MBCS 编码。将 UNICODE 用于新项目,自从 MS 将 Windows 的原生字符串格式更改为 UNICODE 以来,MBCS 已经死了。
-
我不能。我有维护项目,无法更改编码。
-
JSON 无法处理原始 MBCS,您必须将所有字符串转换为 UTF-8。
标签: c++ json boost encoding mfc