“燙屯錕斤拷”,程序員應該知道的原理

“手持兩把錕斤拷,口中疾呼燙燙燙”,對程序員來講既是冷笑話,也是編程中經常遇到的問題。它的原理是什麼呢?小編給你分析一下。

“燙屯錕斤拷”,程序員應該知道的原理

常見亂碼

在Visual Studio中的Debug模式下,如果聲明一個變量,但是沒有初始化,微軟會給未初始化的內存複製為0xCC。給為初始化的內存賦0xCC是有原因的,0xCC其實是INT3中斷指令,所以如果在Debug模式下試圖去執行這塊未初始化的內存的話就會中斷程序。但VS中調試器默認的字符集是MBCS,而在MBCS中0xCCCC正好就是中文中的“”,所以顯示出來就都是燙。如果沒有初始化的變量是用分配堆的內存(例如:c++ new出來的內存),則VS默認初始化成0xCD,0xCDCD在MBCS字符集中就是

Unicode和老編碼體系的轉化過程中,有一些字用Unicode是沒法表示的,Unicode官方用了一個佔位符(U+FFFD)來表示這些文字。U+FFFD的UTF-8編碼是0xEFBFBD,如果重複多次形成:EFBFBDEFBFBDEFBFBD。 這樣在GBK/CP936/GB2312/GB18030的環境中顯示的話,一個漢字2個字節,最終的結果就是:錕斤拷——(0xEFBF),(0xBDEF),(0xBFBD)。


分享到:


相關文章: