qt5.12 解决显示中文乱码问题

本文详细介绍了如何在C++环境中解决中文乱码的问题,通过设置文件编码和在cpp文件中加入特定指令,使中文字符正常显示,避免乱码现象。

在网上找了好多方法都没有解决这个问题,焦头烂额。

然后参考了这个博客,终于搞定了。

https://blog.youkuaiyun.com/fasthorse/article/details/80431808

在菜单栏   文件->选项,找到文本编辑器

文件编码设置如图

在cpp文件中加入

#pragma execution_character_set("utf-8")

之后就可以使用中文了,也不会出现乱码

### 问题分析 在使用 Qt 5.12.10 进行开发时,调试输出(如 `qDebug()`)出现中文乱码是一个常见问题,通常与编码设置、编译器类型(MinGW 或 MSVC)、以及 Qt Creator 的配置相关。根据引用内容,这一问题可能由多个因素引起,包括: 1. **源文件的编码格式**:确保 `.cpp` 文件使用 UTF-8 编码保存。 2. **Qt Creator 的编码设置**:包括文件默认编码、工具使用的文本编码等。 3. **程序内部编码处理**:是否在程序中设置了正确的编码转换机制。 4. **编译器的输出编码**:不同编译器(MinGW 与 MSVC)在输出时可能使用不同的编码方式。 --- ### 解决方法 #### 设置 Qt Creator 的编码配置 确保 Qt Creator 的默认编码设置为 UTF-8,并启用 UTF-8 添加 BOM 选项: - **路径**:`工具 > 选项 > 文本编辑器 > 行为` - **操作**: - 设置“默认编码”为 `UTF-8`。 - 勾选“如果编码是 UTF-8 则添加 BOM”。 #### 设置 `Text codec for tools` 为 System 根据引用[1],这是关键配置之一: - **路径**:`工具 > 选项 > 环境 > 接口` - **操作**:将 “Text codec for tools” 设置为 `System`,而非 UTF-8。 #### 在代码中添加执行字符集指令 在需要输出中文的 `.cpp` 文件中添加以下指令,以确保编译器使用 UTF-8 编码处理字符串: ```cpp #pragma execution_character_set("utf-8") ``` #### 设置 Qt 的本地编码为 UTF-8 在 `main()` 函数中设置本地编码为 UTF-8,以确保所有字符串处理使用统一的编码方式: ```cpp #include <QTextCodec> int main(int argc, char *argv[]) { QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QApplication app(argc, argv); // ... return app.exec(); } ``` #### 使用 `toStdString().c_str()` 输出中文 根据引用[4],直接使用 `qDebug()` 输出 `QString` 可能导致乱码,建议使用如下方式: ```cpp QString str = "中文"; qDebug() << str.toStdString().c_str(); ``` #### 验证编译器输出编码 - 对于 **MinGW** 编译器,确保控制台输出使用 UTF-8 模式。 - 对于 **MSVC** 编译器,确保项目设置中启用了 UTF-8 支持。 --- ### 验证与测试 完成上述配置后,运行以下测试代码以验证输出是否正常: ```cpp #include <QDebug> #include <QTextCodec> int main() { QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QString str = "中文测试"; qDebug() << "直接输出 QString:" << str; qDebug() << "转换为 std::string 后输出:" << str.toStdString().c_str(); return 0; } ``` --- ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值