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源码
版权声明:本文为博主原创文章,,未经博主允许不得转载。
生活中若没有朋友,就像生活中没有阳光一样