手持兩把錕斤拷, 口中疾呼燙燙燙, 腳踏千朵屯屯屯, 笑看萬物鍩鍩鍩
阿新 • • 發佈:2018-12-20
錕斤拷的來歷 GBK與UTF-8
Unicode和老編碼體系的轉化程序中,一定有一些字,用Unicode是沒法表示的,Unicode官方用了一個佔位符來表示這些文字,這就是:U+FFFD REPLACEMENT CHARACTER。
那麼U+FFFD的UTF-8編碼出來,恰恰是 "\xef\xbf\xbd"。假如這個"\xef\xbf\xbd",反覆屢次,例如 "\xef\xbf\xbd\xef\xbf\xbd",然後放到GBK/CP936/GB2312/GB18030的環境中顯示的話,一個漢字2個位元組,最終的後果就是:錕斤拷""錕(0xEFBF),斤(0xBDEF),拷(0xBFBD)
#include<stdio.h> int main() { char *s = "\xef\xbf\xbd\xef\xbf\xbd"; printf("%s\n", s); return 0; }
燙燙燙的來歷 vc++:
在windows平臺下,ms的編譯器(也就是vc帶的那個)在 Debug 形式下,會把未初始化的棧記憶體全部填成 0xcc,用字串來看就是"燙燙燙燙燙燙燙",也就是說呈現了燙燙燙,趕忙反省初始化吧
#include<stdio.h>
int main()
{
char* s;
print(" %s\n",s);
return 0;
}
屯屯屯的來歷 VC:
同上,未初始化的堆記憶體全部填成0xcd,字串看就是"屯屯屯屯屯屯屯屯"。
#include<stdio.h> #include<malloc.h> int main() { char *s; s = (char *)malloc(16); printf(" %s", s); free(p); return 0; }
鍩的來歷 VC HTML:
微軟在 UTF-8 檔案頭部加上了 EF BB BF BOM 標誌。在不支援 BOM 的環境下對其停止 UTF-8 解碼失掉"鍩"字。
#include<stdio.h>
int main()
{
char *s = "\xef\xbb";
printf("%s\n", s);
return 0;
}