1. 程式人生 > >ASCII碼128-255擴充套件編碼顯示奇葩中文的原因

ASCII碼128-255擴充套件編碼顯示奇葩中文的原因

在做那個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】題目:要求輸出國際象棋棋盤。
程式分析:用 控制行,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中直接除錯執行的時候,還是不能正常顯示,粗線了各種奇葩中文。目測可能因為我用的是中文編譯器的緣故吧。