目录
【已解决】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::stringstd::string test = path.toLocal8Bit().data();
printf("%s.\n\n", test.c_str());
// 将 std::string 转 QStringQString 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