Windows10下输出XP风格ASCII控制字符的方法求助
解决Windows 10控制台输出ASCII控制字符(如代码页437笑脸)的问题
核心原因
你遇到的问题本质是Windows 10控制台默认使用的TrueType字体不支持代码页437的低ASCII图形字符,哪怕调用SetConsoleOutputCP(437)修改了代码页,字体里没有对应字形,还是会显示带问号的方框。
解决步骤
1. 更换控制台字体为支持代码页437的点阵字体
右键控制台窗口标题栏 → 选择「属性」→ 切换到「字体」标签页,选择Terminal或Lucida Console(推荐Terminal,纯点阵字体完美兼容DOS时代的代码页437字符),点击确定保存设置。
2. 在代码中正确配置控制台代码页
确保在输出字符前调用代码页设置函数,这里提供两种可靠实现方式:
方式一:使用C++标准库
#include <iostream> #include <windows.h> int main() { // 设置控制台输入输出代码页为437 SetConsoleOutputCP(437); SetConsoleCP(437); // 输出ASCII 1对应的笑脸字符 std::cout << char(1) << std::endl; return 0; }
方式二:使用Win32 API直接输出(避免标准库编码转换干扰)
如果方式一仍有问题,直接调用Windows原生API写入控制台:
#include <windows.h> int main() { SetConsoleOutputCP(437); HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); char smiley = 1; DWORD written; WriteConsoleA(hConsole, &smiley, 1, &written, NULL); return 0; }
3. 验证设置是否生效
运行代码前,可以在控制台手动执行chcp 437确认代码页切换成功,再运行程序就能看到熟悉的笑脸符号了。
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

