方法一:
CEGUI的字符串類設計的初衷是以32個字符為分界點, 低于32個字符使用固定buffer, 高于才使用棧分配內存存儲字符串. 不過因為CEGUI使用utf32,兼容性雖然很好,但是在VC調試器里無法顯示是個很大的問題.
這里參考了mybios博客中的文章,給CEGUI字符串做一個patch
然后需要找到vs2008的autoexp.dat文件
XP下位于:C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
用記事本等工具打開, 在AutoExpand段中像這樣添加:
[AutoExpand]
; CEGUI String
CEGUI::String = str =<d_quickbuff,su> length =<d_cplength>
即可在VC調試器中看到CEGUI字符串內容, 不過中文還是暫時無法支持
方法二:
CEGUI的String不是std::string或std::wstring,而是自己實現的一個字符串類,他的功能跟std的string很接近。
但是,他支持unicode,內部存儲是使用utf32編碼規范來存儲unicode字符,也就是說 typedef uint32 utf32; utf32* d_buffer;用這個32位無符號整型的數組來保存unicode字符串。優點是顯而易見的,就是世界上所有字符都可以包囊進去,畢竟是32位啊!但是,缺點也出來了,有兩點:
第一、內存占用過多,一個字符就要占4個字節,也太浪費了點;
第二、調試不方便,由于VS2005的調試窗口只支持ansi和utf16的格式,所以,CEGUI的String在調試器中只能看到一堆數字數組,而看不到字符,這是很郁悶的,每次要查看都要翻到內存那里看,而且還一堆亂碼,超級麻煩。
解決辦法:修改String類,使用utf16來代替CEGUI的utf32。
優點:
解決了內存占用過多的問題,一個字符只要2個字節就可以了;
解決了調試問題,VS2005直接支持utf16的顯示。
缺點:
可能不支持全世界的字符,因為utf16不能表示超過16位的字符,但是,對于大多數國家的字符來說,已經足夠了,畢竟windows2000/xp也是基于utf16編碼的。
然后,下面是修改后的字符串類:
CEGUIString