QT 应用程序在 Windows 系统上出现中文乱码

这篇具有很好参考价值的文章主要介绍了QT 应用程序在 Windows 系统上出现中文乱码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Windows 早期采用多字节编码,的确容易出现乱码问题。随着 Windows 全面转向 Unicode 编码,多语言的支持得到完美解决,出现中文乱码的问题就很少出现。出现乱码问题一般是 GBK 编码的文件当做 utf8 编码打开,或者 utf8编码的文件当做 GBK 编码打开。这种情况也多出现在 Linux 和 Windows 之间交换文件。

这几个月开始使用 QT 开发应用程序,不管是 Windows,还是 Linux 系统下,没怎么去特意配置,编写出来的应用程序不管哪国语言,都显示得挺好。甚至在 Linux 系统语言选择英语,也可以正常显示中文、日文等。

但是今天碰到一个 QT 应用程序中文乱码问题,而且还是在 Windows 下,搞得措不及手。

情况是这样的,QT 代码是别人的,别人给的可执行程序也没有中文乱码问题。但是这个 QT 项目在我这边编译,编出来的程序就有乱码问题。

我先是怀疑代码采用了 GBK 之类的编码,但是逐一检查,都是采用的 utf8,使用记事本打开,保存,都能显示正常。一般来说,采用 ut8编码是一个非常保险的方案。全程使用 utf8,对多语言的支持最好。

那问题是不是出在 Windows 下特有的 utf8 BOM 上呢?

这里提一下,BOM 代表 Byte order mark,也就是字节序标记,有2个作用:

1. 说明字符流属于Unicode编码,且表明了编码方式

2. 说明了字节序:big endian 和 little endian

一般来说,utf8不需要 BOM,纯粹是微软搞出来的。鉴于 Windows 是使用最广泛的操作系统,尽管 Linux 程序员极度抵制 utf8 BOM,但也阻止不了。

但在 QT 应用程序乱码问题上,和 utf8 BOM 并没有什么关系,是否带 BOM 只是文件头几个字节的差异,要么直接出错,不会引起乱码。

而且这个乱码问题还非常奇怪,在 QT 界面设计器中输入的中文显示正常,但是通过 C++代码添加的字符串就有乱码问题。难不成是字符串类的问题,但是我在代码中使用的 QString,内部就是用的 utf8编码,即使我强行指定 utf8编码,问题也没解决。

这个问题我也问过 GPT,GTP 给的方法也是检查源码的编码,编辑器的编码设定,使用QString 的编码转换方法等等,都没效果。

中文乱码问题可能只会出现在中文世界,可能中国程序员碰到的几率会更大,于是我就上网搜索吧。使用 “QT 中文乱码”作为关键词,果然搜到一堆反映这个问题的。其中一篇文章讲到:

在 Qt Creator 中使用 MSVC 编译器编译项目时,若处理不当容易出现中文字符串乱码问题。 例如,程序运行时,LabInfo显示的汉字就会出现乱码。

void MainWindow::Changed()

{

    QString str="测试";

    ui->LabInfo->setText(str);

这是因为Qt Creator保存的文件使用的是UTF-8编码(是任何平台、任何语言都可以使用的跨平台的字符集),MSVC编译器虽然可以正常编译带BOM的UTF-8编码的源文件,但是生成的可执行文件的编码是 Windows 本地字符集,比如 GBK2312。

也就是在可执行文件中,字符串“测试”是以GBK2312编码的,而可执行程序执行到这条语句时,对这个字符串却是以UTF-8解码的,这样就会出现乱码。

解决方案之一:

在pro文件中添加

win32:msvc{

    QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8

}

按照文章提供的方法,很快解决了界面上的中文乱码问题。

不过我还是有点不明白,之前创建 QT 应用程序也没有加这个选项,也没见出问题。为啥这个工程就会出问题。

继续查问题,我发现在 QT 应用程序中链接 userlib32,如果不指定上面的编译选项,就会有乱码问题。看来问题出在链接 Windows 库上面,所以保险的方法就是加上编译选项,强行指定源码和可执行程序都使用 utf8编码。

最后,还有一点需要注意,如果调用第三方库,在返回字符串的时候,可能不是采用的 utf8,这个时候需要显式转换编码,否则也可能出现乱码。

程序开发中经常会出现莫名其妙的问题,问题虽然小,但如果以前没碰到过,解决起来也挺费时间的,所以在这里记录一下,也许以后还会碰到类似的问题。

另外解决问题时也不能过度依赖 GPT,这次就是查 GPT,而没想着去网上搜索。文章来源地址https://www.toymoban.com/news/detail-794222.html

到了这里,关于QT 应用程序在 Windows 系统上出现中文乱码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Qt的TCP传输数据,出现中文乱码的解决方案

    Qt的TCP传输数据中文乱码的问题,可能是由于编码不一致导致的。可以尝试以下方法解决: 在发送数据之前,将中文字符串进行编码转换。例如,将QString类型的中文字符串转换成UTF-8编码的字节数组,可以使用QString的toUtf8()函数,示例代码如下: QString str = \\\"中文字符串\\\"; QB

    2024年02月09日
    浏览(12)
  • 飞腾架构麒麟V10桌面系统Qt应用程序打包

    飞腾架构麒麟V10桌面系统Qt应用程序打包

    前言 本文记录了在飞腾架构麒麟V10桌面系统中打包Qt应用程序及部署的一些注意事项。打包工具使用的是linuxdeployqt,在飞腾架构架构下没有现成的工具安装包,需要自行编译安装。 1. linuxdeployqt 首先下载linuxqtdeploy下载地址https://github.com/probonopd/linuxdeployqt 下载之后解压目录如

    2024年02月11日
    浏览(43)
  • Windows系统及应用程序的安装设置

    Windows最大的问题就是默认所有缓存,应用程序及用户空间都存放在系统盘中。导致系统盘膨胀很快,甚至到容纳不下的程度。下面总结使用经验。 vs code安装时可以选择安装到系统盘或其他盘。但插件以及缓存都默认存储在系统盘中。下面介绍修改的方法。 缓存默认存放目录

    2024年02月04日
    浏览(8)
  • Qt实现遮罩窗口系统全屏锁定或应用程序界面锁定

    Qt实现遮罩窗口系统全屏锁定或应用程序界面锁定

    qmaskdialog.h qmaskdialog.cpp showFullScreen:全屏遮罩 showMaximized:除任务栏外,全屏 qhook.h qhook.cpp 若仅为应用程序主界面,则设置父窗口,并调用以下函数,盖住主界面 若要遮罩窗口跟随主界面自动拉伸,需重写主界面(MainWindow)的ResizeEvent,如果为全屏遮罩,则不需要, 目前的效果是

    2024年01月23日
    浏览(32)
  • Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    开启电脑的虚拟化支持,在控制面板-程序和功能-启用和关闭windows功能。选择 Hyper-V 和 虚拟机平台 ,然后重启电脑即可。 访问 https://store.rg-adguard.net/ 搜索 https://www.microsoft.com/store/productId/9P3395VX91NR 下载最大的一个文件,即安卓子系统文件 下载地址: http://tlu.dl.delivery.mp.mi

    2024年02月03日
    浏览(9)
  • 基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    完整项目地址:https://download.csdn.net/download/lijunhcn/88453470 项目结构 环境选型 语言:Python 操作系统:Windows 数据库:MySQL 窗口界面:PyQT API接口:百度AI接口,用以实现人脸登陆与注册 远程MySQL表结构 远程表结构sql脚本 项目背景 智能校园防御软件是实现了一款基于摄像头数据

    2024年02月03日
    浏览(11)
  • Windows终端中文乱码,查看系统默认编码及修改系统默认编码

    Windows终端中文乱码,查看系统默认编码及修改系统默认编码

    最近 windows 升级之后出现一个问题,终端出现了乱码,导致启动程序启动不起来。 方式一: 在Windows平台下,win+r 打开运行—》输入cmd进入cmd窗口,输入:chcp 可以得到操作系统的代码页信息,你可以从控制面板的语言选项中查看代码页对应的详细的字符集信息。 例如: 方式

    2024年02月12日
    浏览(10)
  • 毕设项目——基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    毕设项目——基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    完整项目地址:https://download.csdn.net/download/lijunhcn/88453470 项目结构 环境选型 语言:Python 操作系统:Windows 数据库:MySQL 窗口界面:PyQT API接口:百度AI接口,用以实现人脸登陆与注册 远程MySQL表结构 远程表结构sql脚本 项目背景 智能校园防御软件是实现了一款基于摄像头数据

    2024年02月04日
    浏览(10)
  • 应用程序转换工具Unite mac中文版软件特点

    应用程序转换工具Unite mac中文版软件特点

    Unite mac是一款Mac平台上的应用程序转换工具,它可以将任何网站或Web应用程序转换成本地应用程序,以便更方便地访问和使用。 Unite mac软件特点 网站转应用程序:该软件可以将任何网站或Web应用程序转换成本地应用程序,方便用户更方便地访问和使用。 多种应用程序模板:

    2024年02月07日
    浏览(9)
  • Qt 实现应用程序单实例

    目前使 Qt 运行一个实例有如下几种方式: 1.QSharedMemory 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出;这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动。 2.文件锁 在程序运行的时候就在目录下创建一个文

    2024年02月10日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包