当json文件有一些gbk中文字符

时间:2017-07-31 06:48:34

标签: boost gbk

有一个像这样的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>

1 个答案:

答案 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);