关于Qt显示汉字乱码的问题

关于Qt乱码的问题我所遇到的大致有如下几个
1.界面控件显示乱码
2.打开文本乱码
3.接收信息乱码
4.控制台输出乱码
5.打开文件注释乱码

1.乱码的原因

这个博客解释的很详细,也有很多例子去区分:https://www.cnblogs.com/lsgxeva/p/12161743.html

2.过去乱码万金油

过去解决乱码的方式是直接素质三连

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));  
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));  

从Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式

3.现在乱码万金油

//在main.cpp中加入
#include<QTextCodec>

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));//解决汉字乱码问题

将需要显示的中文用QString::fromLocal8Bit包起来

QString::fromLocal8Bit("你想要保存文件嘛?")

4.各种乱码的解决方式

1.界面控件显示乱码:
使用现在乱码万金油可以解决大部分,我是这么解决的,所有的汉字都用GBK存储。

2.打开文本乱码:

 //文件与文本流相关联
        QTextStream in(file);
        //读文件编码方式
        in.setCodec("GBK");
        ui->textEdit->setText(in.readAll());//读文本

3.接收/发送信息乱码

    //《接收》//
    //从通信套接字里面取出内容
    QByteArray array = tcpSocket->readAll();
    QString str = QString::fromLocal8Bit(array.data());
    //《发送》//
    //获取编辑区内容
    QString str = ui->sendEdit->toPlainText();
    //兼容中文字符串
    QByteArray packet = str.toLocal8Bit();

4.控制台输出乱码

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));//解决汉字乱码问题

5.打开文件注释乱码
这个按照步骤点开菜单栏:工具->选项->文本编辑器->行为->文件编码->默认编码
选择编写这个文件时,作者所使用的编码格式。

5.关于Tr函数编码问题

这个博主解释的很到位:https://www.cnblogs.com/lsgxeva/p/7814072.html

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值