boost.xml_parser中文字符问题 (转)

当使用xml_parser进行读xml时,如果遇到中文字符会出现解析错误。

网上有解决方案说使用wptree来实现,但当使用wptree来写xml时也会出错。而使用ptree来写中文时不会出错。

综合以上信息,尝试使用ptree来写xml,而用wptree来读。以一个demo来说明吧。

1 //包含文件
2 #include <boost/property_tree/ptree.hpp>
3 #include <boost/property_tree/xml_parser.hpp>
4 #include <boost/property_tree/json_parser.hpp>
5 #include <boost/foreach.hpp>
6 #include <string>
7 #include <exception>
8 #include <iostream>

定义结构体:

1 struct debug_simple 2 { 3     int itsNumber; 4     std::string itsName; //这里使用string就可以 5     void load(const std::string& filename); //载入函数 6     void save(const std::string& filename); //保存函数 7 };

保存函数,使用ptree:

 1 void debug_simple::save( const std::string& filename )
 2 {
 3     using boost::property_tree::ptree;
 4     ptree pt;
 5
 6     pt.put("debug.number",itsNumber);
 7     pt.put("debug.name",itsName);
 8
 9     write_xml(filename,pt);
10 }

载入函数使用的wptree,读取的值为wstring,需转换成string

 1 void debug_simple::load( const std::string& filename )  2 {  3     using boost::property_tree::wptree;  4     wptree wpt;  5     read_xml(filename, wpt);  6   7     itsNumber = wpt.get<int>(L"debug.number");  8     std::wstring wStr = wpt.get<std::wstring>(L"debug.name");  9     itsName = std::string(wStr.begin(),wStr.end()); //wstring转string 10 }

main函数:

 1 int _tmain(int argc, _TCHAR* argv[])
 2 {
 3
 4     try
 5     {
 6         debug_simple ds,read;
 7         ds.itsName = "汉字english";
 8         ds.itsNumber = 20;
 9
10         ds.save("simple.xml");
11         read.load("simple.xml");
12
13         std::cout<<read.itsNumber<<read.itsName;
14
15     }
16     catch (std::exception &e)
17     {
18         std::cout << "Error: " << e.what() << "\n";
19     }
20     return 0;
21 }

时间: 2024-10-10 17:58:28

boost.xml_parser中文字符问题 (转)的相关文章

boost.xml_parser中文字符问题

当使用xml_parser进行读xml时,如果遇到中文字符会出现解析错误. 网上有解决方案说使用wptree来实现,但当使用wptree来写xml时也会出错.而使用ptree来写中文时不会出错. 综合以上信息,尝试使用ptree来写xml,而用wptree来读.以一个demo来说明吧. 1 //包含文件2 #include <boost/property_tree/ptree.hpp>3 #include <boost/property_tree/xml_parser.hpp>4

ctrl c 中文字符到 vnc 里,中文字符已经被转码

为了测试程序对多语言字符的支持情况,我找来一段中文和北欧的文字,希望把这些文字上传到elasticsearch,并能正确显示. 首先测试了北欧文字,一切OK. 但是中文复制到 VNC 客户端(Linux)后却是问号,因为Linux本来就打不出中文,所以显示乱码我也没在意,我觉得中文的编码无非就是一坨二进制的东西,我又没有改变什么,显示问号只是 linux 无法解析而已.跑了下程序,然后到elasticsearch查询结果,中文部分依然显示的是问号. 接下来就几个想法,首先是,程序在某处应该设置c

解决 iOS NSDictionary 输出中文字符”乱码”(Unicode编码)问题

简单定义一个字典,输出结果: NSDictionary *dic = @{ @"我是中文字符": @"223333", @"aaa": @{ @"aaa": @"啦啦啦" } }; NSLog(@"%@", dic); 将会看到这样的"乱码",这种现象经常在调试服务端返回 JSON 结果的时候遇到: 2015-02-25 19:23:40.346 XXXX[13273

iOS 中文字符判断 正则NSRegularExpression 谓词NSPredicate 和 NSRange

废话不说,直接上代码 #pragma mark - 中文字符判断 - (BOOL)validateContainsChinese:(NSString *)content { NSRegularExpression *regularexpression = [[NSRegularExpression alloc] initWithPattern:@"^[\u4e00-\u9fa5]" options:NSRegularExpressionCaseInsensitive error:nil

python 连接数据库-设置oracle ,mysql 中文字符问题

1 import cx_Oracle 2 import MySQLdb 3 4 def conn_oracle(): 5 cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') //用户名,密码,ip端口号数据库 6 cur = cnn.cursor() 7 return cnn,cur 8 9 10 def close_oracle(cnn,cur): 11 cur.close() 12 cnn.close() 13 14 def conn_mysql

iOS开发之获取一段字符串中的中文字和中文字符

#pragma mark -获取一段字符串中的中文字 + (NSArray *)getAStringOfChineseWord:(NSString *)string { if (string == nil || [string isEqual:@""]) { return nil; } NSMutableArray *arr = [[NSMutableArray alloc]init]; for (int i=0; i<[string length]; i++) { int a

抽取网页源代码中的中文字符

通过正则匹配中文字符,写入新的文本,我在这里删除了表示字体的中文 import re f=open(r'C:\Users\lenovo\Desktop\1.txt','r',encoding='utf8') m= re.compile(u"[\u4e00-\u9fa5]+") p=open(r'C:\Users\lenovo\Desktop\2.txt','w',encoding='utf8') for line in f.readlines(): list=re.findall(m,

获取大段文字中的所有中文字符并去重

主要目的是freetype加载全部中文文字的时候节省一些开销. 1.首先将所有含有中文文字的java.json等,全文粘贴到一个文本中. 2.在文本中全文搜索,开启正则,条件为:[^\一-\龥]+ 3.将所有符合搜索结果的部分replace为"" 4.将剩余的中文字符用下面代码简单处理 import java.util.ArrayList; /** * Created by xirtam on 15/6/29. */ public class Test { public static

[\u4e00-\u9fa5] //匹配中文字符

[\u4e00-\u9fa5] //匹配中文字符 ^[1-9]\d*$    //匹配正整数^[A-Za-z]+$   //匹配由26个英文字母组成的字符串^[A-Z]+$      //匹配由26个英文字母的大写组成的字符串^[a-z]+$      //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 [\u4e00-\u9fa5] //匹配中文字符,布布扣,bubuko.com