1. 程式人生 > >TinyXML不支援UNICODE的解決方法【改造TinyXML】

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, 易於拓展語言支援.