探索printf()爲何可以同時輸出中英文字符之謎---(下)

                                   探索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的很多有關字符的函數也是如此!


……也許,可能,一定,還有別的用途,由於小弟我知識、水平有限,學習涉及到的領域也有限,只知道這麼些!如果你知道還有些別的用途,不妨說出來,分享下,大家共同學習!!!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章