1

有一个这样的json文件,没有bom,使用gbk代码集。boost::property_tree 在大多数情况下可以成功解析它。

try {
    boost::property_tree::read_json(filename, tree);
}
catch (exception &e) {
    cerr << e.what() << endl;
}

但是,如果文件有汉字“历”(c0fa)或“绕”(c040),property_tree会抛出异常“invalid code sequence”

4

1 回答 1

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); 
于 2017-07-31T20:42:23.230 回答