要开始全面将Qt的代码翻译成UTF8 BOM编码了。
下面是一些资料:
1、引用自:
彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_利白的博客-优快云博客_qt utf-8
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置中文字体
a.setFont(QFont("Microsoft Yahei", 9));
//设置中文编码
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("GBK");
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
#endif
return a.exec();
}
测试案例:
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
#include <QApplication>
#include <QFont>
#include <QTextCodec>
#include <QPushButton>
#include <QDebug>
#include <QString>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置中文字体
a.setFont(QFont("Microsoft Yahei", 9));
//设置中文编码
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("gbk");
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
#endif
QString str(QObject::tr("1中文")); #<<正常显示
qDebug() << str;
qDebug() << QStringLiteral("2中文"); #<<乱码
qDebug() << QString::fromLatin1("3中文"); #<<乱码
qDebug() << QString::fromLocal8Bit("4中文"); #<<正常显示
qDebug() << QString::fromUtf8("5中文"); #<<正常显示
qDebug() << QString::fromWCharArray(L"6中文"); #<<正常显示
return a.exec();
}
但是如果换一个不同的系统,例如编译是在简体中文系统,使用是在繁体或者英文系统
则方案4也会乱码 :
qDebug() << QString::fromLocal8Bit("4中文"); #<<换个编码系统乱码
2.方案二
使用宏 #pragma execution_character_set("utf-8") 结合 QString::fromUtf8("5中文");
这样还可以在不同的系统语言下实现编码正常显示