Windows系统下用C语言打印ASCII 128-255字符显示异常如何解决?
Windows下C语言打印128-255扩展ASCII字符的解决方法
你遇到的问题确实是编码不匹配导致的——Windows控制台默认使用的编码(通常是GBK或UTF-8)和你期望的**DOS扩展ASCII(CP437编码)**不一致,直接用printf("%c")输出会出现乱码。以下是两种简单的解决办法:
方法一:在代码中强制设置控制台输出编码
通过Windows API修改控制台的输出代码页为CP437(对应你想要的那套扩展ASCII字符),修改后的代码如下:
#include <stdio.h> #include <windows.h> // 引入Windows API头文件 int main() { // 设置控制台输出代码页为CP437(DOS扩展ASCII编码) SetConsoleOutputCP(437); for(unsigned int ch = 128; ch < 256; ch++) { printf("%d = %c\t\t", ch, ch); // 每4个字符换行,避免输出过于拥挤 if((ch - 127) % 4 == 0) { printf("\n"); } } return 0; }
方法二:手动修改控制台代码页再运行程序
- 打开命令提示符(CMD),执行命令:
chcp 437 - 在当前窗口运行你的C程序,即可正常显示期望的字符。
补充说明
CP437是DOS系统默认的扩展ASCII编码,包含你期望的特殊符号(如制表符、方框、希腊字母等)。如果不修改编码,Windows控制台会用当前系统的默认编码(比如中文系统的GBK)解析这些字节,自然会显示乱码。
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

