现在的位置: 首页 > 综合 > 正文

探索printf()为何可以同时输出中英文字符之谜—(下)

2013年11月09日 ⁄ 综合 ⁄ 共 1383字 ⁄ 字号 评论关闭

                                   探索printf()为何可以同时输出中英文字符之谜---(下) 

---接着前一话题!

        “有什么用啊,搞这东东?还不如回去做你们自己的项目去”。我老师要是知道,我闲的蛋疼学这个,估计会这样子问我!因为之前,他说过类似的话!
       “是啊,你个SB,研究这个做什么,不如直接做项目,能学的东西还更多!”可能你也会这样想!


那么我现在就告诉你,为什么!


A.人与生俱来的好奇心

        我想程序员活着,不能只为项目吧!满足自己的好奇心,会让自己的代码生活更加愉快吧!时间如流水,总有一天会流干!珍惜所有的时间,为自己,开心过好每一天!


B.问题源自项目----上面的理由太虚了,还是谈谈,现实点的东西吧...呵呵

       我们的项目是用 OGRE1-7-4 引擎做有关3D虚拟现实方面的!我在做GUI(有关消息框,按钮之类的东西,Ogre自身是没有的)里的输入框时,需要获取用户通过中文输入法,输入内容!可是问题来了,用windows消息case WM_CHAR:来获取的,所有输入汉字,可是一个汉字会发送两个WM_CHAR:消息,第一次发送一个字节,第二次发送一个字节(你知道为什么windows会将一个字符分两次分发吗?呵呵……
你仔细想想,估计你就会有个跟我一样的答案!我的猜想是因为BigEndian 和 LittleEndian(怎么没听过这两术语吗?那你赶紧百度吧,这里我就不熬述了!))!傻乎乎的我起初以为,汉字码是Unicode,单纯的我,以为Unicode很简单不就存储位多一位,于是乎,用wchar_t存储接受到的数据,然后试着通过MessageBoxW()输出时(因为第一次处理汉字,所以会做个小实验),可是结果却是,谁也不想要的乱码!生活就是这样,往往你越不想要的东西,越容易得到!那么现在你能猜想到其中乱码的原因吗?我的猜想是MessageBoxW()与MessageBoxA()用的不是统一用unicode编码方式!可以肯定的是后者是UTF-8,而前者不是!所以
 乱码  !

如果你觉得我这里没有讲清楚你可以看看http://www.icodelogic.com/?p=215 文章。

我当时就是参考她的!(在此,我深深的感谢那些坚持写技术博客的人,因为你们,我们这些小菜才慢慢成长起来!吃水不忘挖井人嘛,嘿嘿...同时也希望我写的博客,有一天能帮助到那些刚入门的同学,真的,发自内心的!如果,google,百度不到那些技术文章,我估计我早就不愿学编程了,也许你会说可以买相关书记啊,可是穷苦家的孩纸那里买的起那么多的书啊,IT方面的书又特贵!)

哎,扯远了……真的发现自己萝莉啰唆的。

C.网络传输字符往往需要将这些字符相互转换

       因为网络是跨平台的,你不知道对方的PC运行的是什么系统,也许是Linux、异或是windows、还可能是Mac、兴许是安卓……天知道,所以你获得的字符串,不会是统一的一种Unicode编码形式!往往要转换,如果不转换,那么我就要恭喜你将会获得,没人想要的乱码!


D.不仅printf(),windows的很多有关字符的函数也是如此!


……也许,可能,一定,还有别的用途,由于小弟我知识、水平有限,学习涉及到的领域也有限,只知道这么些!如果你知道还有些别的用途,不妨说出来,分享下,大家共同学习!!!!!

抱歉!评论已关闭.