C语言打印å、ä、ö等特殊字符出现乱码如何解决?
C语言特殊字符打印乱码修复方案
你遇到的Ä打印变成õ的问题,本质是源码编码与运行时控制台编码不匹配导致的:Code::Blocks默认将源码保存为UTF-8编码,而Windows系统控制台默认使用OEM编码(西欧地区常用CP850,国内常用CP936/GBK),相同编码值在两套编码下对应不同字符,就会出现乱码。
修复步骤
- 首先补全缺失的头文件:现有代码调用了
strcmp函数但未引入<string.h>,先在头文件区域添加#include <string.h>,避免函数未定义的异常行为。 - 方案1:修改Code::Blocks默认编码适配控制台
- 打开Code::Blocks,点击顶部菜单
设置→编辑器→其他设置 - 点击
配置编码,将默认编码改为对应地区的OEM编码:国内用户选择GBK/CP936,西欧用户选择CP850 - 保存设置后重新打开源码,把乱码的特殊字符重新输入一遍,重新编译运行即可
- 打开Code::Blocks,点击顶部菜单
- 方案2:修改控制台编码适配UTF-8源码(无需改动源码默认编码)
在代码中新增Windows API调用,主动将控制台输入输出编码设为UTF-8,修改后完整代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h> // Windows平台特有头文件,用于设置控制台编码 #include <windows.h> int main (){ // 把控制台输入输出编码都设为UTF-8 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); char name[20]; printf("Enter first name: "); scanf("%s", name); if(strcmp(name, "Carl") == 0){ printf("Carl är bra!"); } else{ printf("Kung!"); } return 0; } - 额外说明:如果是在Linux/macOS环境运行,系统控制台默认就是UTF-8编码,仅需确认Code::Blocks的源码保存编码为UTF-8即可,无需额外修改配置。
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

