QT乱码总结5.万能解决方案

QT乱码总结0.Qt乱码产生因素
QT乱码总结0.Qt乱码产生因素_H-KING的博客-CSDN博客

QT乱码总结1.Unicode 和 UTF-8
QT乱码总结1.Unicode 和 UTF-8_qt unicode utf-8_H-KING的博客-CSDN博客

QT乱码总结2.gbk和ANSI和gb2312的区别
QT乱码总结2.gbk和ANSI和gb2312的区别_qt ansi编码_H-KING的博客-CSDN博客

QT乱码总结3.UNICODE有无BOM
QT乱码总结3.UNICODE有无BOM_qtcreator utf-8 无bom_H-KING的博客-CSDN博客

QT乱码总结4.细谈本地编码
QT乱码总结4.细谈本地编码_qt 字符集编码 system_H-KING的博客-CSDN博客

QT乱码总结5.万能解决方案
QT乱码总结5.万能解决方案_qt \u4e2d\u56fd_H-KING的博客-CSDN博客

QT乱码总结6.编码测试和总结一
QT乱码总结6.编码测试和总结一_H-KING的博客-CSDN博客

QT乱码总结7.编码测试和总结二
QT乱码总结7.编码测试和总结二_H-KING的博客-CSDN博客

QT乱码总结8.编码测试和总结三
QT乱码总结8.编码测试和总结三_"#pragma execution_character_set(\"utf-8\")"_H-KING的博客-CSDN博客

QT乱码总结9.编码测试和总结四
QT乱码总结9.编码测试和总结四_H-KING的博客-CSDN博客

QT乱码总结编码测试工程:
https://download.csdn.net/download/liujiayu2/11987065

qt乱码问题有没有一个终极解决方案,我不想关心什么乱七八糟的编译器,操作系统,文本采用的鸟编码,我就想我一写他到哪里都是正确的。答案是有,我们看一下qt自己是怎么处理中文的。新建一个工程,添加一个标签,写上中文“我爱中国”,如图,

看一下,qt是怎么处理这个事情的。

经过查看qt自动生成的代码,我们找到了它,

“我爱中国”这四个汉字是由12个3位数的数字转化过来的,这12个数字很是眼生啊,回顾前面测试时候我们总结的编码,

/测试编码

我爱中国

ANSI(GBK)编码:CE D2 B0 AE D6 D0 B9 FA

UTF-8编码:E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD

UTF-8编码(bom):EF BB BF E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD

UNICODE编号:\u6211\u7231\u4e2d\u56fd

/

感觉八竿子打不着啊,犯了好一阵子难,最终发现了规律,首先12个数字,我们看到只有UTF-8编码无BOM正好是12个。\346怎么和E6对应起来啊,拿起计算机,转化E6位10进制,230,转化为八进制正好是346,哈哈,这也行,从业C++开发8-9年,第一次看到八进制用到实战中。

看看如何通用化:

QApplication::translate("TestClass", "\346\210\221\347\210\261\344\270\255\345\233\275", 0, QApplication::UnicodeUTF8)

这个函数返回的是一个QString,第一个参数随意填写,第二参数是汉字utf-8编码的八进制。以后遇见汉字就这么处理,这样就能拍出一切干扰保证无乱码。有朋友会问,第二参数,弄得时候有点麻烦事儿,这里介绍一个简单方法:既然qt可以自动生成,以后遇见汉字就让qt帮助我们生成,(专门写个临时工程,帮助生成八进制的汉字)

最后,以前看到过qt官方推荐的就是这种用法,具体在哪里忘了。理论上讲这种方法是可以万能的,缺陷就是可读性差,如果实在解决不了编码问题,可以作为保底方案。

=======================2023-5-17更新===========================

当然这一切的前提是系统里面有中文语言,没有中文怎么办?此处仅考虑ubuntu系统,如果有界面的话就一顿操作,没界面的话怎么办,就只能运行命令,我在网上搜了一些命令,比如一下的:

sudo apt install language-pack-zh-han*
sudo apt install $(check-language-support)

修改配置文件:
sudo vim /etc/default/locale 
将原始内容注释掉或删掉,替换为如下内容:
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_MONETARY="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL="zh_CN.UTF-8"

修改环境文件:
sudo vim /etc/environment 
不修改原有内容!!!直接在原内容下面新开一行加入下列内容:
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_MONETARY="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL="zh_CN.UTF-8"

重启
reboot

locale
locale -a
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8
localectl set-locale LANG=zh_CN.UTF-8
LANG=zh_CN.utf8
LC_COLLATE=C
LC_TIME=zh_CN.utf8

结果是毛用没有,当然很可能是我操作有问题,此处推荐一个同事给我说的方法:

找一个已经安装了相同版本qt系统,转到目录/usr/share/fonts/truetype/arphic/下面有两个文件ukai.ttc和uming.ttc,将这个两个文件拷贝到目标机器的相同目录(如果没有对应目录新建即可)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值