什么,不是吧?又来,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又报错了,好吧,上路!

转载于:https://www.cnblogs.com/Zephyroal/archive/2011/04/15/2017521.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值