Qt之GB2312\GBK字符与QString转换

这篇具有很好参考价值的文章主要介绍了Qt之GB2312\GBK字符与QString转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用途

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

设计

第一步:设置系统格式

在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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt之QString】去除“字符“或替换“字符“小技巧

    去除字符 在Qt中,可以使用以下函数来去除字符串中的字符。 QString remove(int i, int len) :删除字符串中从索引位置 i 开始长度为 len 的字符。 QString remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) :删除字符串中所有与字符 c 相匹配的字符。 cs 参数指定是否区分大小写,默认为

    2024年02月07日
    浏览(34)
  • 一篇文章彻底搞懂Python字符编码方式(中文编码,UTF-8,unicode,gb,gbk,中文乱码,爬虫中文乱码)

    目录 前言 一、字符编码方式的来龙去脉。 1.字符集的含义。 2.编码方式演化过程 1.ASCII 2.GB2312、GBK 3.Unicode 4.UTF-8 二、Python的字符编码及相关操作 1.window系统的字符编码 2.Python的字符编码 1.Python中str与bytes的区别和联系 2.Python encode()方法【对str进行编码】 3.Python decode()方法【对

    2024年01月17日
    浏览(56)
  • C++ Qt开发:字符串QString容器

    在Qt框架中, QString 是一个强大而灵活的字符串容器,专为处理 Unicode 字符而设计。它提供了许多方便的方法来操作和处理字符串,使得在跨平台开发中能够轻松地进行文本操作。QString 是 Qt 开发中不可或缺的一部分,它的灵活性和强大的功能使其成为处理文本和字符串操作

    2024年02月05日
    浏览(50)
  • 【Qt】QString怎么判断是否含有某个字符串

    2023年10月29日,周日晚上 QString怎么判断是否含有某一字符串? 比如我想知道QString中是否含有\\\"connectToHost error\\\" 要判断一个 QString 是否包含特定的子字符串,可以使用  QString  类的  contains()  方法。 下面是使用  contains()  方法来判断一个 QString 是否包含特定子字符串的示例

    2024年02月06日
    浏览(80)
  • 【Qt一坑】const QString 转换 char * 可能的坑

    现在有一个这样的需求,需要将const QString 转换成  char * 而当我这样写时: **这是由于:** str.toStdString().c_str()中toStdString()是一个临时std::string变量,而c_str()是指向这个临时std::string变量的字符串地址,所以传给c时这个临时std::string变量已经被析构,其内容是空,c_str()自然就是

    2024年02月16日
    浏览(36)
  • 关于 Qt中的QString内容存在\u0000使用QChart(0x00)消除 的解决方法

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131860574 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)   做gps时,部

    2024年02月16日
    浏览(35)
  • Qt解析含颜色的QString字符串显示到控件

    1、需求 开发接收含颜色字符串显示到窗口,可解析字符串颜色配置窗口属性,且分割字符串显示。 mprintf(“xxxxxx”);打印的xxxxxx含有颜色配置。 2、实现方法 2.1、条件 选用Qt的PlainTextEdit控件显示字符串,配置为只读模式 初始化串口成功后,用下列代码绑定串口信号,收到

    2024年01月25日
    浏览(54)
  • visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载

    visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载 2.1 visio 3.1 下载字体 http://www.downza.cn/ 微软官方给的链接好多字体没有,其他好多字体网站,就是给你看个样式,这个网站实测可以 进去以后直接搜索 然后查看,本地下载,会有一个压缩包,然后解压

    2024年02月14日
    浏览(135)
  • JavaScript实现字符编码转换utf-8/gbk(附完整源码)

    以上代码中,我们使用了JavaScript内置的TextEncoder和TextDecoder类来实现字符编码转换。这两个类是ES6新增的特性,需要在支持ES6的浏览器上才能正常运行。 使用示例: 运行结果说明转换成功。需要注意的是,在不同的浏览器中,对字符编码的支持程度可能不同,因此在使用时需

    2024年02月04日
    浏览(35)
  • mac安装仿宋GB2312字体

    第一步:双击打开 仿宋_GB2312.ttf 完成字体安装 【下载链接】 百度云: 链接: https://pan.baidu.com/s/1tsyEuNTQbTt99fYQ72JlWQ?pwd=7wa5 提取码: 7wa5 CSDN: https://download.csdn.net/download/weixin_43312117/85709796 第二步:打开访达,点击应用程序,找到 word ,右键 显示包内容 ,打开 Contents 文件夹,打

    2024年02月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包