tinyXml输出utf-8文档
TiXmlDocument虽然能读取utf-8的xml文件,但读入后在内存中是以多字节存储。如果新建一个TiXmlDocument,即使定义头为utf-8编码,直接调用SaveFile方法保存的文档仍然是Ansi(windows在CP936下为GBK)。TiXmlDocument不支持直接输出utf-8文档。
网上搜代码遍寻不着,自己摸索出来一个。
这里的编码转换过程是Ansi->Unicode->UTF-8。
Ansi:TiXmlDocument输出到TiXmlPrinter,调用TiXmlPrinter.CStr(),数据类型是char*
Unicode:数据类型WCHAR或CStringW
UTF-8:注意UTF-8的数据类型是char*,或者CStringA
CFile写入文件的方法Write需要两个参数,待写入数据的在内存的起始地址和要写入的字节数
windows平台utf-8文本的前三个字节是EF BB BF,也即BOM(Byte order mark)标记
代码:
XmlEntityTree=new TiXmlDocument;
TiXmlDeclaration *dec=new TiXmlDeclaration("1.0","utf-8","");
XmlEntityTree->LinkEndChild(dec);
TiXmlElement *pRoot=new TiXmlElement("test");
pRoot->SetAttribute("name","名字");
XmlEntityTree->LinkEndChild(pRoot);
TiXmlPrinter printer;
XmlEntityTree->Accept(&printer);
const CStringW UnicodeStr(printer.CStr());
const CStringA UTF8Str=CW2A(UnicodeStr,CP_UTF8);
char UTF8BOM[3]={‘\xEF’,'\xBB’,'\xBF’};
CFile theFile;
theFile.Open(_T("test.xml"),CFile::modeCreate|CFile::modeWrite);
theFile.Write(&UTF8BOM,3);
theFile.Write((LPCSTR)UTF8Str,UTF8Str.GetLength());
theFile.Close();
转自:http://blog.sina.com.cn/s/blog_5ebafa150100jo2s.html
tinyXml输出utf-8文档的更多相关文章
- Java:多个文档合并输出到一个文档
多个文档合并输出到一个文档 方法:Java NIO package First; import java.io.File; import java.io.FileInputStream; import ...
- 解析txt文本,dom4j工具输出为xml文档
有如下一个ttl.txt文本文档,每一行用空格隔开的三段分别代表主谓宾, 要将它们输出为xml格式文档 工具:dom4j,jar包导入MyEclipse的Java Project工程 代码如下: pa ...
- 用正则表达式输出rdf文档的三元组格式数据
占个位置 1.输出所有尖括号里的内容 package com.jena; import java.io.BufferedReader; import java.io.FileReader; impor ...
- vs2010代码注释自动生成api文档
最近做了一些接口,提供其他人调用,要写个api文档,可是我想代码注释已经写了说明,能不能直接把代码注释生成api?于是找到以下方法 环境:vs2010 先下载安装Sandcastle 和Sandcas ...
- 【Unity3D】【NGUI】本地生成API文档
原地址:http://blog.csdn.net/u012091672/article/details/17438135 NGUI讨论群:333417608 1.安装Doxygen(http://ww ...
- 自动生成api文档
vs2010代码注释自动生成api文档 最近做了一些接口,提供其他人调用,要写个api文档,可是我想代码注释已经写了说明,能不能直接把代码注释生成api?于是找到以下方法 环境:vs2010 先下载安 ...
- Java 后台创建word 文档
---恢复内容开始--- Java 后台创建 word 文档 自己总结 网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...
- 文档API生成神器SandCastle使用心得
一.功能描述 关于Sandcastle网上的参考资料相对较少,Google出来很多资料都是全英文的,相对于我这种英语渣渣看起来还是很费劲的. 言简意赅,Sandcastle主要功能是能够将C#类生成类 ...
- OrCAD Capture CIS 16.6 从PDF文档中提取引脚定义,实现快速地编辑Part的引脚名称
操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 工具2:Excel 工具3:Solid Converter 打开需要 ...
- .NET Core WEB API使用Swagger生成在线接口文档
1项目引用Swashbuckle.AspNetCore程序集和Microsoft.Extensions.PlatformAbstractions程序集 右击项目打开"管理NuGet程序包.. ...
随机推荐
- jQuery得到多个值只能用取Class ,不能用取ID
如果页面有多个checkbox: <input type="checkbox" class="checkApply" id="chec ...
- sql server 日期模糊查询
转换成varchar类型 ) like '%2010-10-09%' 两个字段拼接成一个字段 SELECT C0252_ID, C0252_name,C0252_Addr, ((select top ...
- Log4j HelloWorld实现
简介:Log4j log for java(java的日志) 是java主流的日志框架,提供各种类型,各种存储,各种格式,多样化的日志服务: 在爬虫领域,主要用于记录爬虫的执行过程,方便排查爬虫执行错 ...
- 洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】
--一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的 ...
- bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
被空间卡的好惨啊---- 参考:http://blog.csdn.net/coldef/article/details/70305596 容斥,\( ans=ans_{没有限制}-ans{没有质数} ...
- 由 var str = 'hello world' str.attr ='666'; 到包装类型
近期有些小伙伴在公司的一道面试题踩了坑, 今天特地跟大家一起分享下: 原题如下: var str = 'hello world'; str.attr = '666'; console.log(str ...
- 手机APP测试点总结(参考)
参考链接:http://www.zengyuetian.com/?p=2305 手机APP测试点: 功能测试:多注意核心业务风险(如:注册.登录.付费.订单等) 兼容性测试:系统兼容性.硬件兼容性.软 ...
- Hdu 5407 CRB and Candies (找规律)
题目链接: Hdu 5407 CRB and Candies 题目描述: 给出一个数n,求lcm(C(n,0),C[n,1],C[n-2]......C[n][n-2],C[n][n-1],C[n][ ...
- Service官方教程(10)Bound Service的生命周期函数
Managing the Lifecycle of a Bound Service When a service is unbound from all clients, the Android sy ...
- [转]强制取消TFS2008中其它成员的签出文件
本文转自:http://www.cnblogs.com/georgehu/archive/2010/10/23/1859573.html 有个项目,以前的成员离职了,刚好又签出了一个文件在TFS中并且 ...