正常情况下,vc2010支持直接输出0-127的ASCII字符集,而后128个扩展的字符集总是输出乱码,这和
cmd窗口属性支持2个字节的中文编码有关,需要在cmd下输入系统命令“chcp 437>nul”,这个命令可以直接在函数system()(包含头文件iostream.h)中实现
关于chcp 437>nul的更多含义,可以点击这里的文章可以查看
下面是我的实验
#include <stdio.h>
#include <conio.h>
#include <iostream>
int main()
{
char a=176,b=219;
char c=145;
system("chcp 437>nul");//这一句将实现ASCII扩展的支持
printf("%d\n",sizeof(char));
printf("%c\n",c);
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();
return 0;
}
这个实验说明理解编码方式对于处理字符是必要的
问题又出现了::前128个字符不能正常显示
证明如下:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char a=1;//第一个字符应该是笑脸
char b=145;
system("chcp 437>nul"); //修改当前cmd窗口代码页
cout<<a<<endl;
cout<<b<<endl;
getch();
return 0;
}
笑脸没有出现
目前为止,还没找到解决方案,不过这给我一个启示,有时候预期不一定就能实现,还是“绝知此事要躬行”啊。
在VC2010中,超出基本ASCII的字符默认会显示为乱码,这与cmd窗口的中文编码设置有关。通过在程序中调用`system("chcp 437>nul")`可以改变cmd编码,使其支持扩展ASCII字符。然而,该方法并未成功解决所有扩展字符的显示问题,目前尚无完美解决方案。
1万+

被折叠的 条评论
为什么被折叠?



