什么,不是吧?又来,QT,Ogitor中文解决方法。。。
2011-04-15 20:39
295 查看
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又报错了,好吧,上路!
插件化,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又报错了,好吧,上路!
相关文章推荐
- QT,Ogitor中文解决方法
- Qt中解决中文乱码的方法----编码
- ubuntu12.04下QT编译无法显示中文的解决方法
- QT中中文显示乱码 解决方法
- 【Qt】]两种解决Qt5显示中文乱码的方法
- ubuntu 16.04 + Qt 5.7.1 无法输入中文的解决方法
- Qt中文乱码解决方法
- 【ubuntu linux】 QT中使用MYSQL中文乱码解决方法
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法
- Qt中解决中文乱码的方法----编码
- 开发板和qt中文显示异常解决方法记录
- QT中文乱码解决方法
- QT中一种中文乱码问题的解决方法
- Qt中提示“常量中有换行符“及中文乱码的解决方法
- QT5中文显示乱码解决方法
- 某些开发版中的Qt Designer菜单等中文显示为乱码问题解决方法初探
- Qt 4使用MySQL的中文问题解决方法
- 用ssh,往数据库插入中文时,出错,不是中文时,能正确插入数据库. 解决方法
- QT 5.9版本 使用MSVC2015编译时出现中文字符乱码问题的解决方法
- QT中文乱码解决方法2