QString内部保存的数据就是QChar数组,是Unicode编码(utf16),在字符显示,操作的时候都是基于Unicode。
QT内部的编码方式 Unicode (utf-16)
linux平台默认使用:utf-8
windows平台默认使用:gbk2312/gbk/gbk18030
一、利用QTextCodec类实现unicode、gbk、utf8之间转换
//unicode转换成gbk
std::string UnicodeToGbk(const QString& qstr)
{
QTextCodec* pCodec = QTextCodec::codecForName("GBK");
if(!pCodec) return "";
QByteArray arr = pCodec‐>fromUnicode(qstr);
string cstr = arr.data();
return cstr;
}
//gbk转换成unicode
QString GbkToUnicode(const std::string& cstr)
{
QTextCodec* pCodec = QTextCodec::codecForName("GBK");
if(!pCodec) return "";
QString qstr = pCodec‐>toUnicode(cstr.c_str(), cstr.size());
return qstr;
}
//Utf8与gbk之间转换
QByteArray Utf8ToGbk(const QByteArray &utf8)
{
// utf8 -> unicode
QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QString unicode = utf8Codec->toUnicode(utf8);
// unicode -> gbk
QTextCodec *gbkCodec = QTextCodec::codecForName("GBK");
QByteArray gbk = gbkCodec->fromUnicode(unicode);
return gbk;
}
QByteArray GbkToUtf8(const QByteArray &gbk)
{
// gbk -> unicode
QTextCodec *gbkCodec = QTextCodec::codecForName("GBK");
QString unicode = gbkCodec->toUnicode(gbk);
// unicode -> utf8
QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QByteArray utf8 = utf8Codec->fromUnicode(unicode);
return utf8;
}
//utf8与unicode之间转换
QString Utf8ToUnicode(const QByteArray &utf8)
{
QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QString unicode = utf8Codec->toUnicode(utf8);
return unicode;
}
QByteArray UnicodeToUtf8(const QString &unicode)
{
QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QByteArray utf8 = utf8Codec->fromUnicode(unicode);
return utf8;
}
二、利用fromLocal8Bit和toLocal8Bit实现unicode、gbk、utf8之间转换
//unicode转换成gbk
std::string UnicodeToGbk(const QString& qstr)
{
std::string cstr = "";
cstr.append(qstr.toLocal8Bit().data(),qstr.toLocal8Bit().size());
return cstr;
}
//gbk转换成unicode
QString GbkToUnicode(const std::string& cstr)
{
QString qstr = QString::fromLocal8Bit(cstr.c_str(),cstr.size());//指定size大小
return qstr;
}
//Utf8与gbk之间转换
QByteArray Utf8ToGbk(const QByteArray &utf8)
{
// utf8 -> unicode
QString unicode = QString::fromUtf8(utf8.data(), utf8.size());
// unicode -> gbk
QByteArray gbk = unicode.toLocal8Bit();
return gbk;
}
QByteArray GbkToUtf8(const QByteArray &gbk)
{
// gbk -> unicode
QString unicode = QString::fromUtf8(gbk.data(), gbk.size());
// unicode -> utf8
QByteArray utf8 = unicode.toUtf8();
return utf8;
}
//utf8与unicode之间转换
QString Utf8ToUnicode(const QByteArray &utf8)
{
QString qstr = QString::fromUtf8(utf8.data(), utf8.size());
return qstr;
}
QByteArray UnicodeToUtf8(const QString &unicode)
{
QByteArray utf8 = unicode.toUtf8();
return utf8;
}