文件编码为UTF-8
QString 正常
char* 中文乱码
解决方法:
#include <iostream>
#include <QString>
#include <QTextCodec>int main()
{QString qstr = "你好,世界!"; // 中文字符串// 获取 GBK 编码的 QTextCodecQTextCodec *codec = QTextCodec::codecForName("GBK");// 将 QString 转换为 GBK 编码的 QByteArrayQByteArray gbkData = codec->fromUnicode(qstr);// 使用 constData() 方法获取 const char* 指针const char* charData = gbkData.constData();std::cout << "Converted const char* (GBK): " << charData << std::endl;return 0;
}
QString转const char* GBK编码
实现上述功能有2种方法:
1.直接用转换:无异常
2.用函数封装,debug会出现"字符串无效"
函数封装:QString转const char* GBK编码
Q2C_GBK
QString 都是正常编码
const char*
debug 时显示无法
#include <QTextCodec>
//编码文件: UTF-8
//字符格式转换: 输入QString
//输出: const char*
//debug 时显示"字符串无效"
const char* Q2C_GBK(QString qstr)
{QTextCodec* codec = QTextCodec::codecForName("GBK");QByteArray gbkData = codec->fromUnicode(qstr);// 将 QString 转换为 GBK 编码的 QByteArray//const char* charData = gbkData.constData();return gbkData.constData();}
QString qstr0 = "操作配置";QTextCodec* codec0 = QTextCodec::codecForName("GBK"); QByteArray gbkData0 = codec0->fromUnicode(qstr0);// 将 QString 转换为 GBK 编码的 QByteArrayconst char* charData0 = gbkData0.constData();// 使用 constData() 方法获取 const char* 指针*/QString qstr = "自动保存文件间隔";QTextCodec* codec = QTextCodec::codecForName("GBK");QByteArray gbkData = codec->fromUnicode(qstr);// 将 QString 转换为 GBK 编码的 QByteArrayconst char* charData = gbkData.constData();// 使用 constData() 方法获取 const char* 指针*/m_btw = proFile.getInt(charData0, charData, 1);QString qstr1 = "操作配置";const char* charData1 = Q2C_GBK(qstr1);QString qstr2 = "每日note";const char* charData2 = Q2C_GBK(qstr2);//只要用函数m_btw = proFile.getInt(Q2C_GBK(qstr1), Q2C_GBK(qstr2), 1);m_btw = proFile.getInt(charData1, charData2, 1);
QT工程构建的区别
构建方式:
用到QT库在VS里有2种构建方式
一种属性配置法:属性->配置
一种QT转换法:Qt ->convert
1.属性配置法:
1.VC++目录
2.
3.
把所有库载进去编译通过
2.QT转换法:
实际工程中用哪种要自己试。
我在转换时就出现了如下的问题:
sacnet用QT转换法会出现:
sacnet用配置法就不会出现: