TinyXML不支持UNICODE的解决方法【改造TinyXML】

2018阿里云全部产品优惠券(好东东,强烈推荐)
领取地址 https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=zo93kaue

推荐:服务不支持 chkconfig 的解决方法

[服务不支持 chkconfig 的解决方法这两天一直在研究系统服务,在chkconfig --add  servername的时候老是提示服务不支持 chkconfig 经过查找,解决办法如下。示例,auto_r

TinyXML不支持UNICODE的解决方法【改造TinyXML】

分类:  C/C++ 2012-04-08 10:01  14278人阅读  评论(6)  收藏  举报 encoding microsoft byte windows string 语言

目录(?)[+]

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, 易于拓展语言支持.

推荐:HQL不支持嵌套的伪解决方法

[嵌套查询即 select * from (select * from..)hql不支持,会报错如果不需要查询结果和po对象的属性做对应,只是需要结果,则可以直接用createSQLQuery代替createQuery,这


相关信息参见: RLIB源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

,

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, 易于拓展语言支持.


相关信息参见: RLIB源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

推荐:firefox并不支持selectSingleNode和selectNodes的解决方法

[function test(){ var perid = document.thisForm.PerID.value; var xml="test"; if(window.ActiveXObject){ var xml=new ActiveXObject("Mic

相关推荐