有一个像这样的json文件,没有bom,使用gbk代码集。 boost :: property_tree可以成功解析它。
try {
boost::property_tree::read_json(filename, tree);
}
catch (exception &e) {
cerr << e.what() << endl;
}
但是,如果文件具有中文字符&#34;历&#34;(c0fa)或&#34;&#34;(c040),则property_tree将抛出异常&#34;无效的代码序列&#34; < / p>
答案 0 :(得分:0)
你可以尝试使用带有流的重载并在手前填充正确的语言环境:
#include <fstream>
#include <iostream>
#include <boost/locale.hpp>
使用Boost Locale生成区域设置的位置,例如,在POSIX:
boost::locale::generator gen;
auto CN = gen.generate("zh_CN.GBK");
然后灌输:
std::ifstream ifs(filename, std::ios::binary);
ifs.imbue(CN);
boost::property_tree::ptree pt;
read_json(ifs, pt);