qt unicode、gbk、utf8之间转换

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;
}

猜你喜欢

转载自blog.csdn.net/byxdaz/article/details/129823543