用途

在中国国内与其它数据接口通讯时,经常会遇到GB2312\GBK格式的字符,这时需要进行数据格式转换 否则只有ASCII码正常,而其它就是乱码。

设计

第一步:设置系统格式

在main.c文件下配置UTF-8

#include

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

{

GB2312Chars[i] =static_cast( 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);

}

效果

用汉字测试,正常。

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: