Qt5 加载中文路径以及中文文本显示乱码问题:QString::fromLocal8Bit() (**)

目录

【已解决】c++ qt解决setText乱码问题(**)

Qt5 加载中文路径以及中文文本显示乱码问题

解决QT->setText()中文出现乱码问题,使用QString或者tr()均出现乱码。

Qt5读取文件中中文的数据为乱码,如何解决(***)

-------------------------------------------------------

https://blog.csdn.net/ken2232/article/details/130316198
QString::toWCharArray 与 宽字符路径、空格 (测试OK)(***)

========================================

【已解决】c++ qt解决setText乱码问题

文章目录

        问题背景
        问题解决方案

问题背景

想让控件setText显示的中文不要乱码,结果就是个乱码。
问题解决方案

看了之前有一个大佬写的文章,结果发现,加上这四行代码

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);  //qt5 没有了?不需要了??
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); //qt5 没有了?不需要了??

例如

#include "testxml.h"

#include <QTextCodec>
using namespace std;
testXml::testXml(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
//目标很简单,将你好,显示在lineEdit
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QString name = "你好";
    ui.lineEdit->setText(name);


}

————————————————
版权声明:本文为CSDN博主「执念斩长河」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37149062/article/details/130846019

Qt5 加载中文路径以及中文文本显示乱码问题

关于Qt中文乱码的问题,网上查找的解决方案,千篇一律的是:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));

但是,实际上这种方案并不能彻底解决问题。

经过自己的测试,总结了一个乱码问题的解决方案:

获取中文路径时,使用: 

QString::fromLocal8Bit()

在转化为std::string使用时,使用下面方法转换,这样使用FILE、ifstream等读取文件时,不会出错

 QStirng::toLocal8Bit()

当把std::string再输出到Qt界面时,使用下面方法转换后,显示不会出现乱码

QString::fromLocal8Bit(std::string.c_str())

测试代码如下:

// 将中文路径赋给 QString

QString path = QString::fromLocal8Bit("C:\\Users\\ZT_007\\Desktop\\效率问题.txt");


printf("%s.\n\n", path.toLocal8Bit().data());


// 将 QString 转 std::string

std::string test = path.toLocal8Bit().data();

printf("%s.\n\n", test.c_str());


// 将 std::string 转 QString

QString test2 = QString::fromLocal8Bit(test.c_str());

printf("%s.\n\n", test2.toLocal8Bit().data());   

测试结果:

Qt5读取文件中中文的数据为乱码,如何解决(***)

Qt5读取文件中的数据为乱码,主要原因是文件和程序使用的编码不一致造成的,有两种方法来解决乱码问题。

获取文件中的数据,设置编码格式(只针对当次读取有效)。代码如下:

        // 指定编码格式
        QTextCodec *codec=QTextCodec::codecForName("utf-8");
        // 设置文件
        QFile file("C:/Users/Desktop/123.txt");
        if(file.open(QIODevice::ReadOnly)){
            // 获取文件的数据
            QByteArray con=file.readAll();
            // 按指定编码格式修改获取的数据
            QString str=codec->toUnicode(con);
            // 输出数据,格式正常
            qDebug()<<str;
        }

设置程序的整体编码格式,可以整体解决程序的编码问题

文件必须使用相应的编码格式。

代码如下:

    // 设置编码格式,在main()方法中
    QTextCodec *codec=QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(codec);

    // 打开文件
    QFile file("C:/Users/Desktop/123.txt");
    if(file.open(QIODevice::ReadOnly))
    {
        // 获取文件数据    
        QString content=file.readAll();
        qDebug()<<content;
        file.close();
    }

 
————————————————
版权声明:本文为CSDN博主「tony_xj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/quietbxj/article/details/107482437

解决QT->setText()中文出现乱码问题,使用QString或者tr()均出现乱码。

微软VC编译器源代码使用GB2312编码进行保存。源码中的汉字字符串在生成可执行文件的过程中被转换成了本地编码。

Qt内部是使用Unicode编码,即QString保存的是Unicode编码的字符串。

Qt内部需要使用Unicode编码的字符串才能正确处理。使用QString的函数默认QString内部是Unicode字符串。

由于二者不同,所以对于汉字来说,需要经过转换,否则出现乱码。

QString的成员函数知道按照何种编码来处理字符串。

fromLocal8Bit() 可以把中文转为Unicode

只需添加:

QString::fromLocal8Bit
lab1->setText("机智"); --> lab1->setText(QString::fromLocal8Bit("机智"));

————————————————
版权声明:本文为CSDN博主「小浩笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41611475/article/details/109167051

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值