TinyXML不支持UNICODE的解决方法【改造TinyXML】
2012-04-08 10:01
344 查看
TinyXML目前仅直接支持解析UTF-8或者ASCII编码的XML, 对于其它编码必须经过转换才能使用, 这给Windows项目带来了麻烦, 频繁的编码转换也可能给性能带来巨大损失.
对此, 作者给出了解释的是"UTF-8 is not a double byte format - but it is a standard encoding of Unicode! TinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this
time. It is common to see the term "Unicode" improperly refer to UTF-16, a wide byte encoding of unicode. This is a source of confusion."
下面说说这样的局限性
对于ASCII(多字节字符集)项目,
虽然支持UTF-8, 但却不能与控件直接交互, 必须经过转换, 否则不能支持中文.(But for English users , UTF-8 is the same as low-ASCII)
而对于UTF-16(Unicode 字符集)项目, 情况更糟糕, 由于TinyXML使用char *, 你不能将其直接编译为宽字符版本, 即使编译了宽字符版本(替换char *等), 原来对UTF-8的支持就丧失了(需要修改处理方式).
对此, 我的解决方案是:
1.将所有char用TCHAR代替, 将's'改为_T('s') 以及"str"改为_T("str")
2.实现自己的String(可选), 这里主要是为了方便以及整合到rlib中
3.在LoadFile/SaveFile中进行适当的编码转换
4.对TinyXML的源码做部分修改
至此, TinyXML已经能够编译为宽字符版本了, 并且支持UTF-8,UTF-16,UTF-16F,ASCII, 易于拓展语言支持.
对此, 作者给出了解释的是"UTF-8 is not a double byte format - but it is a standard encoding of Unicode! TinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this
time. It is common to see the term "Unicode" improperly refer to UTF-16, a wide byte encoding of unicode. This is a source of confusion."
下面说说这样的局限性
对于ASCII(多字节字符集)项目,
虽然支持UTF-8, 但却不能与控件直接交互, 必须经过转换, 否则不能支持中文.(But for English users , UTF-8 is the same as low-ASCII)
而对于UTF-16(Unicode 字符集)项目, 情况更糟糕, 由于TinyXML使用char *, 你不能将其直接编译为宽字符版本, 即使编译了宽字符版本(替换char *等), 原来对UTF-8的支持就丧失了(需要修改处理方式).
对此, 我的解决方案是:
1.将所有char用TCHAR代替, 将's'改为_T('s') 以及"str"改为_T("str")
2.实现自己的String(可选), 这里主要是为了方便以及整合到rlib中
3.在LoadFile/SaveFile中进行适当的编码转换
4.对TinyXML的源码做部分修改
至此, TinyXML已经能够编译为宽字符版本了, 并且支持UTF-8,UTF-16,UTF-16F,ASCII, 易于拓展语言支持.
相关信息参见: RLIB源码
相关文章推荐
- TinyXML不支持UNICODE的解决方法【改造TinyXML】 分类: C/C++ 2012-04-08 10:01 14278人阅读 评论(6) 收藏 举报 encodingmicrosoftb
- xml-rpc不支持非asc字符串的解决方法
- tomcat启动提示server.xml的context节点中不支持source属性警告的解决方法
- tomcat启动提示server.xml的context节点中不支持source属性警告的解决方法
- myEclipse下web.xml不支持标记的解决方法
- FPDF支持unicode 的解决 方法
- tinyxml读取中文时显示乱码的解决方法
- tinyxml读取中文时显示乱码的解决方法
- 解决在firefox浏览器不支持ajax的transport.responseXml方法问题
- DataTable 不支持来自 XML 的架构推断。解决方法
- 解决在firefox浏览器不支持ajax的transport.responseXml方法问题
- ECC 5.0,un-unicode系统,接收从外围unicode系统传过来的XML文件中出现乱码的解决方法
- 解决RAPIDxml对UTF-16/UNICODE支持不好的方法
- 【java】org.xml.sax.SAXParseException;在实体引用中, 实体名称必须紧跟在 '&' 后面。解决方法
- QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)
- android下载xml解析 文件尾出现NUL 导致解析异常的解决方法
- Cocos2d-x 怎样支持多点触摸(IOS上多点失灵的解决方法)
- linux上的php环境默认不支持bcdiv函数解决方法
- Hibernate配置文件中没有XML提示的解决方法
- 解决NSXmlParser无法解析非utf-8编码的XML问题的方法