“手持兩把锟斤拷,口中疾呼燙燙燙”,對程序員來講既是冷笑話,也是編程中經常遇到的問題。它的原理是什麼呢?小編給你分析一下。
常見亂碼
在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)。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!