★ QT内部采用unicode字符集、支持utf-8编码,而windows默认使用(GBK/GB2312/GB18030)
1.某些SDK传入路径时不支持中文路径,使用toLocal8Bit().data() 转换为本地的(GBK/GB2312/GB18030)编码
QString res_path=QApplication::applicationDirPath()+"/中文/beauty_res";
SDK::Init(res_path.toLocal8Bit().data());
2.QT编辑器包含中文时编译报错,使用notepad++更改cpp文件编码格式为:UCS-2 Little Endian编码
3.qDebug()输出中文时控制台区域乱码:在cpp文件第一行添加:#pragma execution_character_set("utf-8")
4.判断读取的Text变量是否等于某个字符串:
方法一:QString::fromLocal8Bit()
使用fromLocal8Bit()函数,可以实现从本地字符集GB到Unicode的转换,从而处理汉语显示乱码等问题
QString name=ui->label->text();
if(name==QString::fromLocal8Bit("珊瑚色"))
{
qDebug()<<"equal";
}
else{
qDebug()<<"no";
}
方法二:在cpp文件第一行添加:#pragma execution_character_set("utf-8")
5.Json操作:保存、读取含中文的Json,使用GBKToUTF8()
#include <QTextCodec>
#include <QApplication>
#include <QFile>
#include <QJsonObject>
#include <QJsonDocument>
QString GBKToUTF8(QString s)
{
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
return codec->toUnicode(s.toUtf8());
}
void SaveJson()
{
QFile *file=new QFile(QApplication::applicationDirPath()+"/history.json");
if(!file->open(QIODevice::WriteOnly|QIODevice::Truncate))
{
qDebug()<<"open json file failed";
return;
}
QJsonObject values;
values.insert("lipStickName1",GBKToUTF8("西瓜红"));
values.insert("lipStickValue1",20);
QString lipStick2="珊瑚色";
values.insert("lipSticksName2",GBKToUTF8(lipStick2));
values.insert("lipStickValue2",10);
QJsonDocument doc;
doc.setObject(values);
QByteArray root=doc.toJson(QJsonDocument::Compact);
QString strJson(root);
QTextStream in(file);
in<<strJson;
file->close();
}
void ReadJson()
{
QFile *file=new QFile(QApplication::applicationDirPath()+"/history.json");
if(!file->open(QIODevice::ReadOnly))
{
qDebug()<<"open json file failed";
return;
}
QJsonParseError *error=new QJsonParseError;
QJsonDocument doc=QJsonDocument::fromJson(file->readAll(),error);
if(error->error!=QJsonParseError::NoError)
{
qDebug()<<"json file wrong";
return;
}
else
{
QJsonObject obj=doc.object();
QString lipStickName1=obj.value("lipStickName1").toString();
qDebug()<<lipStickName1;
}
file->close();
}
6.打开含有中文路径的文件
QString sticker_json_path = QApplication::applicationDirPath() + "/beauty_res/sticker/sticker_config.json";
QFile file( QString::fromLocal8Bit(sticker_json_path.toLocal8Bit()));
if(!file.open(QIODevice::ReadOnly)) {
qDebug() << "test:sticker_config open failed!";
return;
} else {
qDebug() <<"test:sticker_config open successfully!";
}