CEGUI setText无法显示中文。。
项目设好了中文字体,加上中文输入,输入的字符显示出来是正常的,但是直接在程序里面setText中文却显示乱码……
查了一下是字符编码的关系……CEGUI是UTF-8格式的。。必须进行转换。。我的项目使用多字节,下面是转换函数:
-
CEGUI::String CharArrayToString(const char* pszText)
-
{
-
// ASCII -> Unicode
-
int nLen = strlen(pszText);
-
std::wstring unicode(nLen, 0);
-
unicode.resize(
-
MultiByteToWideChar(CP_ACP, 0, pszText, static_cast<int>(nLen),
-
const_cast<wchar_t*>(unicode.data()), unicode.size())
-
);
-
-
// Unicode -> UTF-8
-
char buff[128] = "";
-
WideCharToMultiByte(CP_UTF8, 0, unicode.data(), static_cast<int>(unicode.size()),
-
buff, sizeof(buff), NULL, NULL);
-
-
return CEGUI::String((CEGUI::utf8*)(buff));
-
}
附上几个链接:
- 关于CEGUI的中文输入与显示:http://blog.csdn.net/naugthyLeo/archive/2009/05/25/4215687.aspx
这好像是我的老师 - -!我的项目就是按照该方法实现的中文输入。
- CEGUI中的汉字显示实现:http://blog.sina.com.cn/s/blog_613d5bdc0100er4f.html
由于CEGUI根据Unicode编码生成纹理,中文字符可能需要生成过多纹理,这里作者对CEGUI做了一些修改。
- 研究cegui,写脚本:http://songxiaoyu8.blog.163.com/blog/static/2081812820096232432677/
本文的末尾有一组编码转换的函数,方便使用^^ 上面的函数就是根据这里的修改。