2017-07-31 106 views
1

有一個像這樣的json文件,沒有bom,使用gbk代碼集。 boost :: property_tree可以在大多數情況下成功解析它。boost read_json拋出異常,當json文件有一些gbk中文字符

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

然而,如果文件中有中國字「歷」(c0fa)或「繞」(C040),該property_tree會拋出異常「無效的代碼序列」

回答

0

你可以嘗試使用過載這需要一個流和灌輸適當的區域設置前手:

#include <fstream> 
#include <iostream> 
#include <boost/locale.hpp> 

如果您使用升壓區域設置來生成一個區域例如,在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); 
+0

謝謝你的幫助!但是,當json文件具有中文字符「歷史」(c0fa)時,read_json拋出異常「無效代碼序列」 –

相關問題