qt控制台程序与qt窗口程序在读取数据库中文字段的差异!!巨坑

问题:最近在自己编写一个类,这个类需要对mysql数据库进行插入和查询。因为最后是以一个类文件的形式拿来单独使用,所以在创建项目的时候就创建了一个qt的控制台程序。但是在对数据库的内容进行查询时,出现了中文乱码。参考了之前的程序对数据的读写,感觉没有什么差异,最后想到可能是控制台程序和qt桌面程序处理方式不一样,最后才发现确实是有这么一个坑存在。

原因:

1 默认编码处理方式不同

Qt Widgets:GUI 组件内部自动处理 UTF-16/UTF-8 转换

控制台程序:依赖系统控制台的编码设置,且默认不自动转换

2.输出环境差异

Widgets:显示在 GUI 组件中(如 QLabel),使用 Qt 的文本渲染系统

控制台:输出到系统终端,受终端编码限制(特别是 Windows cmd)

  1. 文本编解码器默认设置不同
    Widgets 应用通常有更完整的编码初始化
    控制台程序默认可能使用本地编码(如 Windows 的 GBK)

解决方式:

添加如下代码

cpp 复制代码
#include <windows.h>

// 在 main() 中:
SetConsoleOutputCP(65001); // 设置控制台输出为 UTF-8
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

如果是Linux系统,应该就不需要windows那块代码,因为Linux下默认使用utf8

相关推荐
霸道流氓气质几秒前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶1 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
ULIi096kr3 分钟前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
折哥的程序人生 · 物流技术专研16 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
初圣魔门首席弟子21 分钟前
Qt C++ 项目实战:修改共享头文件后的高效增量编译与快速发布流程
数据库
wb0430720122 分钟前
仓库搬家不停业——从阿明的“在线换仓库“,看数据库迁移与 Schema 演进的实战方法论
数据库·adb·架构
伊灵eLing25 分钟前
GoLang 语言基础
开发语言·后端·golang
两年半的个人练习生^_^25 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
lx1885486989626 分钟前
Redis大Key阻塞:单线程CPU100%的致命陷阱
数据库·redis·缓存
小白不白11127 分钟前
Invoke的用法
开发语言·人工智能·数码相机·计算机视觉·c#