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