CEGUI的String不是std::string或std::wstring,而是自己實(shí)現(xiàn)的一個(gè)字符串類,他的功能跟std的string很接近。
但是,他支持unicode,內(nèi)部存儲(chǔ)是使用utf32編碼規(guī)范來(lái)存儲(chǔ)unicode字符,也就是說(shuō) typedef uint32 utf32; utf32* d_buffer;用這個(gè)32位無(wú)符號(hào)整型的數(shù)組來(lái)保存unicode字符串。優(yōu)點(diǎn)是顯而易見(jiàn)的,就是世界上所有字符都可以包囊進(jìn)去,畢竟是32位啊!但是,缺點(diǎn)也出來(lái)了,有兩點(diǎn):
第一、內(nèi)存占用過(guò)多,一個(gè)字符就要占4個(gè)字節(jié),也太浪費(fèi)了點(diǎn);
第二、調(diào)試不方便,由于VS2005的調(diào)試窗口只支持ansi和utf16的格式,所以,CEGUI的String在調(diào)試器中只能看到一堆數(shù)字?jǐn)?shù)組,而看不到字符,這是很郁悶的,每次要查看都要翻到內(nèi)存那里看,而且還一堆亂碼,超級(jí)麻煩。
解決辦法:修改String類,使用utf16來(lái)代替CEGUI的utf32。
優(yōu)點(diǎn):
解決了內(nèi)存占用過(guò)多的問(wèn)題,一個(gè)字符只要2個(gè)字節(jié)就可以了;
解決了調(diào)試問(wèn)題,VS2005直接支持utf16的顯示。
缺點(diǎn):
可能不支持全世界的字符,因?yàn)閡tf16不能表示超過(guò)16位的字符,但是,對(duì)于大多數(shù)國(guó)家的字符來(lái)說(shuō),已經(jīng)足夠了,畢竟windows2000/xp也是基于utf16編碼的。
然后,下面是修改后的字符串類:
CEGUIString