什么,不是吧?又来,QT,Ogitor中文解决方法。。。

Ogitor的思路可谓是完美主义,

插件化,boost,QT,Ogre,

PG,SkyX,HydraX,Caelum。。。

强大的扩展,易改的架构,

可是,可是,无数次纠结之后我要感叹,

实在是太欺负人了,

中文,老祖宗给我们留下这么多些字,活活要被只有26个字母民族的发明给烦恼死。。。

唉,不纠结了,

但真的,统一编码是件很重要的事情,建议C++委员会以后用Unicode32 一捅天下,

相关utf-8之类的压缩减容放在内核中进行,省的那些老担心内存的爷爷程序员煞费苦心的为每一套程序来一个String体系。。。

首先要说,QT,Ogre的String都是没问题的,

而且它们都是很优秀的模块,

可是一山不容二虎,俩热血青年放在一起,扔到了一个陌生环境(中文),

能不打架么?

而且QT我根本不熟,硬着头皮赶鸭子上架的,

为此,我气得调试到半夜一点,我拍过键盘,

我试过整体换string为wstring,String为UTFString(在Ogre或CeGUI下有过此尝试的朋友握个爪,一起哭一下),

或者,一个一个MBCS换WCHAR

经历过眼见把bug压到一个,刚靠上椅子吐气,忽然IDE暴走跳出几百个错误的悲剧。。。

经多时尝试,十余次的重编后,一向优秀的vs也挂了数次,

(PS:好吧,我承认是我菜,我是当祥林嫂来吐槽的,可诸位可以想想,Ogitor编译完成大概整个Dev包有1.6G)

终于发现其中的几大问题,

静下心来,其实也就是

1,IO中文目录文件读取错误,

2,UString.toStdString中文软码错误,

3,Ogre::UTFString与Ogre::String的转换错误

。。。。

归类好了,问题也就迎刃而解了,

首先,UString可以toLoacl8Bit可以做出正确转换,

其次,String向UTFString转换时可以MultiByteToWideChar(CP_ACP, NULL, str.c_str(), str.size(), NULL, 0);

最终,除去小问题,最终的解决方法,编码器

 setlocale( LC_CTYPE, "");
 QTextCodec* codec =QTextCodec::codecForName("GB2312");
 QTextCodec::setCodecForCStrings(codec);
 QTextCodec::setCodecForTr(codec);
 QTextCodec::setCodecForLocale(codec);

还没具体试过,估计有上面几行问题就基本上可以搞定了。

当然,话说回来,bug也是个好东西,

最快地带你进入了解一款软件。。。

这不,Ogitor又报错了,好吧,上路!

posted @ 2011-04-15 20:39  Zephyroal  阅读(997)  评论(0编辑  收藏  举报