若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131434492
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…
Qt开发专栏:实用技巧
需求
开发北斗GPS定位通讯,在”通信申请($TXSQ)“协议上重新定义了一套自定义协议,通讯内容中涉及到中文传递,需要按照北斗工具进行编码切换。
原理
北斗gps通讯协议实际上是三种模式:一种汉字,一种代码,代码中又分为纯代码和混合,代码模式实际上是对可视化的部分进行GBK编码转化。
自定义协议设计时需区分了指令混合传递(指令字节是不可视化,解析为对话内容则需要GBK转花奴)。
转化方法
就是对协议中定义的可视化内容直接做无视本地编码化的GBK编码转换,一刀切的处理方式。
#include <QApplication>
#include <QTextCodec>
#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString str = QString("你好1234");
#if 1
// 1.无视本地编码
// 2.强制本地转换为GBK编码
LOG << "内容:" << str;
QTextCodec *pTextCodec = QTextCodec::codecForName("GBK");
QByteArray data = pTextCodec->fromUnicode(str);
LOG << "转换为GBK编码:" << QString(data.toHex(' '));
#endif
#if 1
// 1.GBK编码转换为本地编码
// 2.无视本地编码
// QTextCodec *pTextCodec = QTextCodec::codecForName("GBK");
pTextCodec = QTextCodec::codecForName("GBK");
str = pTextCodec->toUnicode(data);
LOG << "转换为本地文本:" << str;
#endif
return a.exec();
}
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131434492