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
最新文章
- 如何用ORM支持SQL语句的CASE WHEN?
- node开发
- http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!!
- HDU 5828(线段树)
- Visual Studio 2010 更新NuGet Package Manager出错解决办法
- c++11:iota
- 推荐一个优秀的前端框架——Bootstrap
- 在Android studio模拟器中运行apk文件
- 异常处理&;RandomAccessFile&;节奏感
- C# 正则表达式应用
- (转)JDK 1.8 预览版Lambda语法分析
- Android 面试100问- 0序0
- 浅拷贝和深拷贝(谈谈java中的clone)
- Linux Shell 笔记
- Python-JS (JS介绍~JS的基础数据类型)
- ssh批量执行命令-paramiko
- 安卓 运行、调试 配置 android Run/debug configurations
- iOS app bundle id
- JQuery Mobile - 自定义图标!
- 仿饿了吗点餐界面两个ListView联动效果
热门文章
- 摘抄 - 不为人知的JS调用样式的方法---document.createElement().addRule(..)
- [Swift]编码拾遗
- 倒排索引构建算法BSBI和SPIMI
- htm 与 html 的区别
- [USACO 2011 Nov Gold] Above the Median【逆序对】
- K - KazaQ’s Socks
- 配置Ubuntu16.04第01步:U盘安装 Ubuntu 16.04系统
- C#中的list的System.Predicate<;in T>;和System.Comparison<;in T>;的应用
- ORA-00445: Background Process ";xxxx"; Did Not Start After 120 Seconds
- C# Equals的重写