这两天跟CEGUI的String教了不少劲,写几点心得吧
1 String内部采用utf32编码,提供了String::data()和String::c_str()两个函数获取utf8编码格式。
优点:可以支持世界上所有的字符,
缺点:一个字符占32位,比较浪费空间。
2 加载中文路径文件失败
跟踪一个文件的加载过程,会看到最终打开文件的一句话:
std::ifstream dataFile(final_filename.c_str(), std::ios::binary|std::ios::ate);
//其中final_filename是CEGUI::String
第一点里面说了String::c_str()返回的是utf8编码格式的字符,因此这个dataFile的open是失败的。这里有两个解决办法:1)避免文件路径中出现中文字符串,一般final_filename可以传相对路径,只要避免相对路径中出现中文就可以了。2)在这句代码之前做一个转换,将final_filename.c_str()转到当前代码页,然后再用ifstream打开。
3 utf8与char之间的转换函数。