讲师中心 微信公众号
AI工具推荐 视频效率加速

如何解决VSCode运行C语言时控制台中文输出全是乱码问号的问题

梦枫大大_9349

梦枫大大_9349

发布时间:2026-03-24 15:56:03

|

554人浏览过

|

来源于php中文网

原创

根本原因是编码不匹配:Windows控制台用GBK,VSCode终端默认按UTF-8解析,而C程序未调用setlocale(LC_ALL, "")设置本地化,导致UTF-8中文被GBK终端错误解码为问号。

如何解决vscode运行c语言时控制台中文输出全是乱码问号的问题

VSCode终端里printf中文显示为问号,根本原因是编码不匹配

Windows默认控制台(cmd/powershell)用的是GBK编码,而VSCode的集成终端默认按UTF-8读取输出——但C程序如果没显式设置本地化,printf会直接把UTF-8字节流扔给GBK终端,每个中文字符被拆成2–3个字节,每个字节又映射成一个无效字符(通常是?)。

必须在C代码开头调用setlocale,且参数不能写错

只加#include <locale.h></locale.h>不够,不调用setlocale或参数写成"Chinese""chs"之类,完全无效。Windows下唯一可靠写法是:

<pre class="brush:php;toolbar:false;">#include <stdio.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL, "");  // 关键:空字符串,继承系统区域设置
    printf("你好,世界!\n");
    return 0;
}
  • setlocale(LC_ALL, "")让C运行时自动读取Windows当前区域(控制面板→区域→管理→更改系统区域设置),通常就是<code>Chinese (GBK)
  • 不要用setlocale(LC_CTYPE, "Chinese_China.936")这类硬编码——936是GBK代码页,但不同Windows版本可能有差异,空字符串最稳
  • 必须放在printf之前,且只能调用一次;重复调用可能失效

VSCode的launch.json和终端编码设置要同步

即使代码里setlocale正确,如果VSCode终端本身没切到GBK,还是乱码。两个地方要确认:

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载
  • 终端右下角点击编码标识(如UTF-8),选GBK或GB2312,然后重启终端
  • 在.vscode/launch.json中,确保console字段不是integratedTerminal——它强制走VSCode终端编码逻辑;改用externalTerminal可绕过,但会弹cmd窗口
  • 更推荐保留integratedTerminal,但加上env环境变量:"env": {"CHCP": "936"}(不过实际生效依赖终端启动方式,不如手动切编码直接)

编译器和源文件保存编码也得是GBK

如果源文件本身用UTF-8保存(VSCode默认),而setlocale设的是GBK,printf会把UTF-8字节当GBK解码,结果仍是乱码。解决方法:

立即学习“C语言免费学习笔记(深入)”;

  • VSCode右下角点击编码(如UTF-8),选Reopen with Encoding → GBK,再保存文件
  • 或者统一用UTF-8 + setlocale(LC_ALL, ".65001")(65001是UTF-8代码页),但Windows旧版控制台不支持,容易失败
  • Clang/GCC编译时加-fexec-charset=GBK可指定执行字符集,但仅限GCC 11+,且VSCode默认用MinGW或MSVC,不一定支持

最稳的路径就一条:源文件存为GBK、代码第一句setlocale(LC_ALL, "")、VSCode终端手动切到GBK。三者缺一不可,少一个都会回到问号。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2135

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3262

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1096

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3739

2025.09.10

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

788

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1029

2023.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1738

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2684

2023.09.04

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

80

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn