【GCC】解决GCC编译运行的代码在VScode中显示中文乱码

文章讲述了在VScode中使用C++插件编译运行代码时,由于UTF-8源文件和Windows终端默认的GBK编码冲突导致中文显示乱码,通过添加-fexec-charset=GBK选项或修改源文件编码解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在VScode中,使用C/C++插件,在终端中调用gcc编译运行cpp代码,示例代码如下:

// utf-8
#include<iostream>
using namespace std;

class Student
{
public:
    // 成员变量
    char *name;
    int age;
    float score;
    // 成员函数
    void say()
    {
        cout << name << "的年龄是" << age << ",成绩是" << score << endl;
    }
};

int main()
{
    Student stud1;
    stud1.age = 12;
    stud1.name = "djsakl";
    stud1.score = 90;

    stud1.say();
}

当按照如下所示编译运行示例代码,结果如下

PS D:\code\cpp> g++ .\test.cpp -o test
.\test.cpp: In function 'int main()':
.\test.cpp:22:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   22 |     stud1.name = "djsakl";
      |                  ^~~~~~~~
PS D:\code\cpp> .\test.exe
djsakl鐨勫勾榫勬槸12锛屾垚缁╂槸90

可以看到运行结果中文显示乱码。

解决方法

PS D:\code\cpp> g++ -fexec-charset=GBK .\test.cpp -o test2
.\test.cpp: In function 'int main()':
.\test.cpp:22:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   22 |     stud1.name = "djsakl";
      |                  ^~~~~~~~
PS D:\code\cpp> .\test2.exe
djsakl的年龄是12,成绩是90

当在g++编译时加入选项-fexec-charset=GBK可以看到正确显示中文。
因为源文件是utf-8编码,而windows终端默认采用cp936,其中中文对应GBK,所以显示乱码。当加入选项-fexec-charset=GBK后将正确显示。
或者将源文件改为GBK编码格式后使用g++ .\test.cpp -o test编译也可以正常显示中文。

### 解决 VSCode 终端输出中文乱码的方法 #### 设置一致的编码格式 为了消除 VSCode 控制台中的中文乱码,确保整个开发环境中使用的编码格式保持一致非常重要。通常情况下,推荐将所有部分都设置为 UTF-8 编码[^2]。 #### 修改 Windows 系统区域选项 对于 Windows 用户来说,调整操作系统的语言设置有助于改善这一状况。具体做法是在“控制面板 -> 时钟和区域 -> 区域”中更改系统位置并安装相应的语言包,这一步骤能够帮助解决底层命令提示符 (cmd) 对非 ASCII 字符的支持问题[^3]。 #### 配置 Visual Studio Code 设置 在 VSCode 内部也需要做一些必要的改动来匹配外部环境: 1. **更新终端配置文件** 打开 `.vscode/settings.json` 文件(如果没有该文件则创建),加入如下内容以指定终端使用 utf-8 编码: ```json { "terminal.integrated.shellArgs.windows": ["chcp", "65001"] } ``` 2. **编辑 C/C++ 编译参数** 如果项目中有 `tasks.json` 或者类似的构建脚本,则应确认其中包含了正确的字符集定义。例如,在 GCC/G++ 下可以通过 `-finput-charset=UTF-8 -fexec-charset=GBK` 参数实现源文件读取与执行阶段的不同编码转换;而对于 MSVC 则可通过 `/source-charset:gbk` 达到相同效果[^4]。 通过上述措施,应该能有效缓解甚至彻底解决问题。值得注意的是,某些特定版本的操作系统或软件可能存在兼容性差异,因此如果遇到特殊情况仍无法正常工作的话,可能还需要进一步探索其他针对性更强的办法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值