解决vscode 控制台输出中文乱码问题(搞定)

介绍了在VSCode中进行终端配置的操作步骤。通过文件-首选项-设置-用户设置-功能-终端,在settings.json中编辑,加入配置“code-runner.runInTerminal”: true 来完成相关设置。

文件->首选项->设置->用户设置->功能->终端->在settings.json中编辑
加入配置:"code-runner.runInTerminal": true

使用C语言,使用vscode软件,使用g++编译器,使用simplified chinese(gbk)编码环境,文件夹WJ下有三个文件: main.c文件内容为: #include "recipe.h" #include <windows.h> // 程序入口 int main() { SetConsoleOutputCP(936); // 设置控制台输出为 GBK SetConsoleCP(936); // 设置控制台输入为 GBK main_menu(); return 0; } recipe.c文件内容为: #include "recipe.h" // 全局变量定义 Recipe recipes[MAX_RECIPES]; int recipe_count = 0; // 主菜单函数定义 void main_menu() { int choice; while (1) { printf("\n--- 菜谱管理系统 ---\n"); printf("1. 添加菜谱\n"); printf("2. 修改菜谱\n"); printf("3. 删除菜谱\n"); printf("4. 查询菜谱\n"); printf("5. 查看全部菜谱\n"); printf("6. 退出系统"); printf("\n-------------------\n"); printf("请选择操作: "); scanf("%d", &choice); getchar(); switch (choice) { case 1: add_recipe(); break; case 2: edit_recipe(); break; case 3: delete_recipe(); break; case 4: search_recipes(); break; case 5: view_all_recipes(); break; case 6: exit(0); default: printf("无效选择,请重新输入。\n"); } } } // 添加菜谱 void add_recipe() { if (recipe_count >= MAX_RECIPES) { printf("菜谱已满,无法添加更多。\n"); return; } Recipe *r = &recipes[recipe_count++]; printf("请输入菜名: "); fgets(r->name, NAME_LEN, stdin); r->name[strcspn(r->name, "\n")] = '\0'; printf("请输入分类: "); fgets(r->category, CATEGORY_LEN, stdin); r->category[strcspn(r->category, "\n")] = '\0'; printf("请输入食材: "); fgets(r->ingredients, INGREDIENTS_LEN, stdin); r->ingredients[strcspn(r->ingredients, "\n")] = '\0'; printf("请输入制作步骤: "); fgets(r->steps, STEPS_LEN, stdin); r->steps[strcspn(r->steps, "\n")] = '\0'; printf("请输入谁喜欢吃: "); fgets(r->liked_by, LIKED_BY_LEN, stdin); r->liked_by[strcspn(r->liked_by, "\n")] = '\0'; printf("菜谱添加成功!\n"); } // 修改菜谱 void edit_recipe() { char name[NAME_LEN]; printf("请输入要修改的菜名: "); fgets(name, NAME_LEN, stdin); name[strcspn(name, "\n")] = '\0'; for (int i = 0; i < recipe_count; i++) { if (strcmp(recipes[i].name, name) == 0) { int field; printf("请选择要修改的字段:\n"); printf("1. 分类\n2. 食材\n3. 制作步骤\n4. 谁喜欢吃\n"); scanf("%d", &field); getchar(); switch (field) { case 1: printf("请输入新分类: "); fgets(recipes[i].category, CATEGORY_LEN, stdin); recipes[i].category[strcspn(recipes[i].category, "\n")] = '\0'; break; case 2: printf("请输入新食材: "); fgets(recipes[i].ingredients, INGREDIENTS_LEN, stdin); recipes[i].ingredients[strcspn(recipes[i].ingredients, "\n")] = '\0'; break; case 3: printf("请输入新制作步骤: "); fgets(recipes[i].steps, STEPS_LEN, stdin); recipes[i].steps[strcspn(recipes[i].steps, "\n")] = '\0'; break; case 4: printf("请输入新的喜好者: "); fgets(recipes[i].liked_by, LIKED_BY_LEN, stdin); recipes[i].liked_by[strcspn(recipes[i].liked_by, "\n")] = '\0'; break; default: printf("无效选择。\n"); } printf("菜谱信息已更新。\n"); return; } } printf("未找到该菜名的菜谱。\n"); } // 删除菜谱 void delete_recipe() { char name[NAME_LEN]; printf("请输入要删除的菜名: "); fgets(name, NAME_LEN, stdin); name[strcspn(name, "\n")] = '\0'; for (int i = 0; i < recipe_count; i++) { if (strcmp(recipes[i].name, name) == 0) { for (int j = i; j < recipe_count - 1; j++) { recipes[j] = recipes[j + 1]; } recipe_count--; printf("菜谱删除成功。\n"); return; } } printf("未找到该菜名的菜谱。\n"); } // 查询菜谱 void search_recipes() { int choice; printf("请选择查询方式:\n"); printf("1. 按菜名\n2. 按分类\n3. 按食材\n4. 按谁喜欢吃\n"); scanf("%d", &choice); getchar(); char keyword[NAME_LEN]; printf("请输入菜名: "); fgets(keyword, NAME_LEN, stdin); keyword[strcspn(keyword, "\n")] = '\0'; int found = 0; for (int i = 0; i < recipe_count; i++) { switch (choice) { case 1: if (strstr(recipes[i].name, keyword)) { printf("菜名: %s\n分类: %s\n食材: %s\n制作步骤: %s\n谁喜欢吃: %s\n\n", recipes[i].name, recipes[i].category, recipes[i].ingredients, recipes[i].steps, recipes[i].liked_by); found = 1; } break; case 2: if (strstr(recipes[i].category, keyword)) { printf("菜名: %s\n分类: %s\n食材: %s\n制作步骤: %s\n谁喜欢吃: %s\n\n", recipes[i].name, recipes[i].category, recipes[i].ingredients, recipes[i].steps, recipes[i].liked_by); found = 1; } break; case 3: if (strstr(recipes[i].ingredients, keyword)) { printf("菜名: %s\n分类: %s\n食材: %s\n制作步骤: %s\n谁喜欢吃: %s\n\n", recipes[i].name, recipes[i].category, recipes[i].ingredients, recipes[i].steps, recipes[i].liked_by); found = 1; } break; case 4: if (strstr(recipes[i].liked_by, keyword)) { printf("菜名: %s\n分类: %s\n食材: %s\n制作步骤: %s\n谁喜欢吃: %s\n\n", recipes[i].name, recipes[i].category, recipes[i].ingredients, recipes[i].steps, recipes[i].liked_by); found = 1; } break; } } if (!found) printf("未找到匹配的菜谱。\n"); } // 查看全部菜谱 void view_all_recipes() { if (recipe_count == 0) { printf("当前没有菜谱。\n"); return; } for (int i = 0; i < recipe_count; i++) { printf("菜名: %s\n分类: %s\n食材: %s\n制作步骤: %s\n谁喜欢吃: %s\n\n", recipes[i].name, recipes[i].category, recipes[i].ingredients, recipes[i].steps, recipes[i].liked_by); } } recipe.h文件内容为: #ifndef RECIPE_MANAGER_H #define RECIPE_MANAGER_H #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define MAX_RECIPES 100 #define NAME_LEN 100 #define CATEGORY_LEN 50 #define INGREDIENTS_LEN 200 #define STEPS_LEN 500 #define LIKED_BY_LEN 100 // 定义菜谱结构体 typedef struct { char name[NAME_LEN]; char category[CATEGORY_LEN]; char ingredients[INGREDIENTS_LEN]; char steps[STEPS_LEN]; char liked_by[LIKED_BY_LEN]; } Recipe; // 全局变量声明 extern Recipe recipes[MAX_RECIPES]; extern int recipe_count; // 函数声明 void add_recipe(); void edit_recipe(); void delete_recipe(); void search_recipes(); void view_all_recipes(); void main_menu(); #endif 将WJ文件在集成终端打开: PS C:\Users\34171\Desktop\code\WJ> g++ -finput-charset=GBK -o WJ1 main.c recipe.c PS C:\Users\34171\Desktop\code\WJ> ./WJ 运行后显示这些乱码 --- 鑿滆氨绠$悊绯荤粺 --- 1. 娣诲姞鑿滆氨 2. 淇敼鑿滆氨 3. 鍒犻櫎鑿滆氨 3. 鍒犻櫎鑿滆氨 4. 鏌ヨ鑿滆氨 5. 鏌ョ湅鍏ㄩ儴鑿滆氨 4. 鏌ヨ鑿滆氨 5. 鏌ョ湅鍏ㄩ儴鑿滆氨 5. 鏌ョ湅鍏ㄩ儴鑿滆氨 6. 閫€鍑虹郴缁 ------------------- 璇烽€夋嫨鎿嶄綔: 应该怎么修改
07-04
### VSCode 控制台输出中文乱码解决方案 中文乱码问题通常是由于编码格式不统一导致的。以下是一个综合的解决方案,确保 VSCode控制台能够正确显示中文字符。 #### 1. 设置文件编码为 UTF-8 确保源代码文件是以 UTF-8 编码保存的。可以通过右下角的编码选择器来查看和更改文件的编码[^4]。如果文件不是以 UTF-8 编码保存,点击编码选择器并选择“将文件另存为 UTF-8”。 #### 2. 配置 VSCode终端编码 在 VSCode 中打开设置(快捷键 `Ctrl+,`),搜索 `terminal.integrated.encoding` 并将其值设置为 `utf8`。这一步确保了集成终端使用 UTF-8 编码。 #### 3. 修改系统注册表 对于 Windows 系统,可以修改注册表以确保命令处理器默认使用 UTF-8 编码: 1. 按 `Win + R` 打开运行窗口,输入 `regedit` 并回车。 2. 导航到路径:`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor`。 3. 添加一个字符串值,名称为 `autorun`,数据为 `chcp 65001`[^3]。这一步会自动将命令行的代码页设置为 UTF-8。 #### 4. 设置环境变量 如果上述方法仍未解决问题,可以尝试通过设置环境变量来修正乱码问题: 1. 右键点击“此电脑”或“我的电脑”,选择“属性”。 2. 点击“高级系统设置”,然后点击“环境变量”按钮。 3. 在“系统变量”或“用户变量”中,点击“新建”。 4. 输入变量名称为 `PYTHONIOENCODING`(如果问题不仅限于 Python,则可能需要考虑其他变量名称),并在变量值中输入 `UTF-8`。 5. 点击“确定”保存设置,并重新启动 VSCode。 #### 5. 更新 VSCode 有时乱码问题可能是由于 VSCode 的旧版本中存在的 bug 导致的。确保你的 VSCode 是最新版本,可以通过 VSCode 内置的更新功能或者访问官方网站下载最新版本[^4]。 #### 6. 检查外部工具和插件 如果你在 VSCode 中使用了外部工具或插件来运行代码(例如,通过任务或终端运行 Python 脚本),确保这些工具或插件也支持 UTF-8 编码。如果问题是由特定的插件或工具引起的,可以尝试联系其开发者以获取帮助[^4]。 #### 示例代码 以下是一个简单的 C++ 程序示例,确保在 VSCode 中正确显示中文输出: ```cpp #include <iostream> using namespace std; int main() { cout << "你好,世界" << endl; return 0; } ``` 确保按照上述步骤配置后,运行该程序时,中文输出不会出现乱码。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值