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

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源码

开源项目TinyXml项目所涉及的字符编说明如下: 1. TinyXml函数调用接口的字符型参数,仅支持`窄字符`格式(char*),不兼容`宽字符`格式(wchar_t*)。 2. TinyXml函数提供的Xml内容解析功能,仅支持以ANSI编和UTF8编Xml字符串,也即`多字节编`。 3. TinyXml函数提供的Xml内容解析功能,不支持内容以UTF16编和UTF32编Xml字符串,也即`Unicode`。 4. UTF8编Unicode的一种实现方式,以不定个数的字节来存储一个Unicode值,支持多国语言文字。 也即,UTF8编在编实现上属于`多字节编`,在编标准上属于`Unicode`。 5. 人类语言中同一个的字符,如果在各种不同的标准如ANSI编、UTF8编、UTF16编和UTF32编中都存在值, 就可以相互转换。因为各个标准下的可编字符容量不同,部分语言字符会在一个编标准库下存在, 而在另外一个编标准库下不存在,这时精确的相互转换就无法执行,但是仍然有默认字符转换。 -- 6. VC语言,当定义了宏 _UNICODE 后,_T系列宏或函数,以`宽字符`承载UTF16编TinyXml如何提供`宽字符`函数接口,支持解析UTF16编、UTF32编标准下的Xml字符串呢? 本项目: - 新增适用于`宽字符`参数的函数接口,调用字符集转换功能,转换为`窄字符`参数,再回调TinyXml原版接口。 - 对于以UTF16编、或UTF32编Xml字符串,转换为UTF8编 --
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值