ASCII码128-255扩展编码显示奇葩中文的原因

来源:互联网 发布:linux dd 备份系统 编辑:程序博客网 时间:2024/06/04 19:08

在做那个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中直接调试运行的时候,还是不能正常显示,粗线了各种奇葩中文。目测可能因为我用的是中文编译器的缘故吧。