|
为CEGUI配置中文字体后,使用C++调用和操作CEGUI,中文能够正常的处理和显示
例如:
Editbox * editbox = static_cast<Editbox*>(m_WinMgr.getWindow("Demo8/Window1/Controls/Editbox"));
Listbox * listbox = static_cast<Listbox*>(m_WinMgr.getWindow("Demo8/Window1/Listbox"));
CEGUI::String edit_str(editbox->getText());
ListboxTextItem* tempItem = new ListboxTextItem(edit_str);
listbox->addItem(tempItem);
testText->setText(mbcs_to_utf8((const char*)"中文测试"));
等等均可以正确的获取到控件上输入的中文,并设置给其它控件等.
但是将逻辑移到lua中,中文就完全不能处理了
例如:
local editbox = winMgr:getWindow("Demo8/Window1/Controls/Editbox")
local listbox = CEGUI.toListbox(winMgr:getWindow("Demo8/Window1/Listbox"))
local addbutton = winMgr:getWindow("Demo8/Window1/Controls/Add")
addbutton:setText(editbox:getText())
print(editbox:getText())
CEGUI.Logger:getSingleton():logEvent(editbox:getText())
local newItem = CEGUI.createListboxTextItem(editbox:getText())
listbox:addItem(newItem)
将全部得到乱码
getText()得到的 能正常显示在控件上的中文 ,用于输出,记log,或者设置给其它控件,均显示的是乱码.
而在lua中单纯写入的中文可以正常显示
print("中文测试") --正常
CEGUI.Logger:getSingleton():logEvent("中文测试") --乱码
print是lua自己的东西,如果这样都出乱码,那lua也不用玩了-_-
以上现象分析: lua与cegui的编码格式可能不同,lua与cegui交互,从cegui获得的中文字符串,或传给cegui的中文字符串,两方均不能正常解析,彼此都认不出,都为乱码.
尝试在lua中将中文字符串编码方式转换后再发送给cegui, lua的字符串编码, 要么为ascii,要么为unicode
cegui::string的编码方式, 目前已知的有,接收utf8的构造函数
所以,写了N个编码转换函数进行尝试
AsciiToUnicode , AsciiToUtf8 , unicodeToUtf8 , ..............
(均进行了测试,转换正确)
然后将这些函数导入到lua中
EditBox:setText(AsciiToUnicode(str))
EditBox:setText(AsciiToUtf8(str))
EditBox:setText(unicodeToUtf8(str))
几乎常用的所有编码能试的全试了,结果只是乱码更乱....
求高手指点..万分感谢
如果回帖说不清..QQ67997876, 或者发个电话号码我打电话过去
lua与cegui之间究竟发生了什么,它们之间有着怎样不可告人的秘密? |
|