使用vs code调试Qt/C++程序中文乱码问题解决——cout和qDebug

问题描述:

正常情况下,使用vscode调试程序时cout中文输出乱码。

原因分析:

window系统默认编码格式是GBK,vscode源码我使用的是utf8,所以中文输出乱码

解决方法:

一个思想:统一编码格式

1.将vscode编辑器编码格式改为GBK,方法:vscode设置编码格式的几种方法_TMS320VC5257H的博客-优快云博客_vscode编码格式设置

2.将cmd终端输出默认格式改为utf-8,方法:windows修改cmd命令行窗口UTF-8编码(临时、永久)_干净的坏蛋的博客-优快云博客_永久修改chcpk

qt程序为了跨平台(linux默认utf-8)方便,我选择方法2,但是qDebug中文输出又乱码了,因为qDebug自行将utf-8转为系统默认的字符编码GBK,

所以,cout时用方法2,qDebug别修改终端默认字符编码格式就行了 

### VSCode中配置C/C++环境以避免中文乱码 为了确保VSCode中的C/C++项目能够正常显示处理中文字符,在配置过程中需要注意几个关键设置。 #### 创建工作区 随便建立一个空文件夹作为VSCode的工作区,然后用VSCode打开此文件夹。所有的后续配置仅在此特定文件夹内有效;对于新创建的文件夹(即新的工作区),需重复相同的配置过程[^1]。 #### 安装必要的扩展 安装Microsoft官方提供的C/C++扩展包,该工具集提供了 IntelliSense、调试支持以及其他功能来增强 C C++ 的开发体验。 #### 设置launch.json 在`.vscode`目录下的`launch.json`文件用于定义启动配置。当涉及到可能存在的编问题时,可以考虑加入如下所示的部分配置项: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.exe", // 编译后的可执行程序路径 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", // GDB 路径 "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing" }, { "description": "Set charset to UTF-8", "text": "set charset utf-8" // 设定GDB使用的字符集为UTF-8 } ], "preLaunchTask": "build", // 构建任务名称 "internalConsoleOptions": "openOnSessionStart" } ] } ``` 上述JSON片段通过指定`set charset utf-8`命令告诉GDB采用何种字符编方式运行,从而有助于防止终端输出出现乱码现象。 #### 修改源代 考虑到某些情况下控制台本身也可能是造成乱码的原因之一,可以在源代开头处添加以下两行语句以便于Windows平台上的应用程序正确识别并转换输入/输出流所涉及的文字编格式: ```cpp #include <windows.h> // ... SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); ``` 这两条函数调用分别设置了当前控制台窗口的标准输出与标准输入的代页至UTF-8模式,使得即使是在非Unicode环境下也能较好地兼容多字节字符集的语言表达形式。 #### 测试验证 最后编写一段简单的测试代如下面的例子一样保存为`main.cpp`: ```cpp #include <iostream> using namespace std; int main(){ cout << "你好世界!" << endl; return 0; } ``` 编译并运行这段小程序,观察其是否能顺利打印出预期的结果——“你好世界!”而非乱码,则说明整个流程已经成功解决了潜在的中文乱码难题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值