ASCII碼128-255擴充套件編碼顯示奇葩中文的原因
阿新 • • 發佈:2019-02-13
在做那個100道演算法例題的時候碰到腫麼一個程式
【程式 7】輸出特殊圖案,請在c環境中執行,看一看,Very Beautiful!題目:輸出特殊圖案,請在c環境中執行,看一看,Very Beautiful!1.
程式分析:字元共有256個。不同字元,圖形不一樣。
程式碼:
然後再輸出的時候變成了這個樣子:#include <stdio.h> #include <conio.h> int main() { char a=176,b=219; printf("%c%c%c%c%c\n",b,a,a,a,b); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",a,a,b,a,a); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",b,a,a,a,b); getch(); }
開始的時候因為題目也沒細說,只以為輸出結果就是醬紫滴。。。。
然後到了程式9滴時候。。。問題粗來咯:
【程式 9】題目:要求輸出國際象棋棋盤。
程式分析:用 i 控制行,j來控制列,根據 i+j 的和的變化來控制輸出黑方格,還是白方格。
程式碼:
輸出結果:#include <stdio.h> #include <conio.h> int main() { int i, j; for(i = 0;i < 8;i ++ ) { for(j = 0;j < 8;j ++ ) { if( (i + j) % 2 == 0) { printf("%c%c", 219, 219); } else { printf(" "); } } printf("\n"); } getch(); return 0; }
好吧,這個樣子明顯就不對了。然後發現程式7和程式9都用的是ASCII碼219,但是輸出了不一樣的奇葩中文,而不是應該顯示的黑框框。
google一下,找到了原因:編號在128~255的是擴充套件的編碼,原本就不是作為顯示用的,出現這個問題的原因是控制檯使用了中文內碼表,要顯示擴充套件ASCII碼,則將執行這個程式的控制檯的的內碼表改為 437 (OEM-美國) 即可!
在控制檯視窗標題欄上 右鍵--》預設值--》預設內碼表 修改為437,再次執行程式就看到了
上面兩個程式真正的輸出結果應該是:
最後,奇怪的是:我的WIN7是英文原版的,為毛控制檯還是中文內碼表。還有就是雖然醬紫改了以後的確可以正常顯示了,但是隻是在我直接執行生成的EXE檔案才能正常顯示,當我在VS中直接除錯執行的時候,還是不能正常顯示,粗線了各種奇葩中文。目測可能因為我用的是中文編譯器的緣故吧。