用途
在中国国内与其它数据接口通讯时,经常会遇到GB2312\GBK格式的字符,这时需要进行数据格式转换
否则只有ASCII码正常,而其它就是乱码。文章来源:https://www.toymoban.com/news/detail-504459.html
设计
第一步:设置系统格式
在main.c文件下配置UTF-8文章来源地址https://www.toymoban.com/news/detail-504459.html
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//编码格式设置
{
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(utf8);
}
......
}
第二步:设计经常使用的子函数
QString 为unicode码,转为GBK码
/******************************************************
函数名:
功能: QString 为unicode码,转为GBK码
输入:QString str 如"123" MaxLen转换最大长度,此时实际GB2312Chars[]长度必须是MaxLen+1
输出:INT8U *GB2312Chars
例 str = "1234",MaxLen = 3,转换后,GB2312Chars[0] = 0x31,
GB2312Chars[1] = 0x32,
GB2312Chars[2] = 0x33,
GB2312Chars[3] = 0x00,
*******************************************************/
INT32S ToolFunc::QStringToGB2312Chars(QString str, INT8U *GB2312Chars, INT32S MaxLen)
{
//qDebug()<<"QStringToGB2312Chars";
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QTextCodec* gbk = QTextCodec::codecForName("gbk");
QString strUnicode= utf8->toUnicode(str.toLocal8Bit().data());
QByteArray tt= gbk->fromUnicode(strUnicode);
INT32S ttLen=tt.size(); //结果不包括0x00
INT32S i ;
for (i = 0;(i<ttLen)&&(i< MaxLen);i++)
{
GB2312Chars[i] =static_cast<INT8U>( tt.at(i));
}
GB2312Chars[i] = 0x00;
return i;
}
将GB2312/GBK字符串转化为QString
/******************************************************
函数名:
功能:将GB2312/GBK字符串转化为QString
输入:字符串:GB2312Chars,如
GB2312Chars[0] = 0x31,
GB2312Chars[1] = 0x32,
GB2312Chars[2] = 0x33,
GB2312Chars[3] = 0x00,
输出:QString str("123")
*******************************************************/
void ToolFunc::GB2312CharsToQString(INT8U *GB2312Chars, QString &str)
{
QByteArray arry;
ToolFunc::charArrToByteArrayCopy(arry,GB2312Chars,ToolFunc::CharsLength(GB2312Chars));
QTextCodec* utf8Codec = QTextCodec::codecForName("utf-8");
QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
QString strUnicode = gb2312Codec ->toUnicode(arry); //无编码
QByteArray ByteUTF8 = utf8Codec ->fromUnicode(strUnicode); //无编码转换
str = QString::fromLocal8Bit(ByteUTF8);
}
效果
用汉字测试,正常。
到了这里,关于Qt之GB2312\GBK字符与QString转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!