公司代码有多国语言支持,遇到需要使用QString转char

网上很多人一碰到编码问题就无脑的Copy上面3行……
从Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式

  1. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
  2. QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
  3. QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

查了一上午最终发现只需要将文本编码方式转一下就好

转自:https://blog.csdn.net/AmyAndTommy/article/details/82256454

任何编码先转换成统一编码toUnicode(),然后再转出fromUnicode();

gb2312转utf8:

QString ssss=QString::fromLocal8Bit("ceshi我是测试");  //注意此处定义gb2312编码的方式,要使用fromLocal8Bit()
    gb2312ToUtf8(ssss);

utf8转gb2312:

入参是utf8编码的字符数组

(注意参数的编码格式一定要对,否则转换不出来,尤其是gb2312ToUtf8()这个函数,极为容易传入unicode编码格式的参数)

上代码:

void gb2312ToUtf8(QString strGb2312)
        {
            printf("@@@ gb2312 str is:%s\n",strGb2312.toLocal8Bit().data());
            QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
            QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
        
            QString strUnicode= gb2312Codec->toUnicode(strGb2312.toLocal8Bit().data());
            QByteArray ByteUtf8= utf8Codec->fromUnicode(strUnicode);
     
            char *utf8code = ByteUtf8.data();
            printf("@@@ Utf8  strGb2312toUtf8:%s\n",utf8code);
        }
     
    ///
     
        void utf8ToGb2312(char *strUtf8)
        {
            printf("~~~~ utf8  str is:%s\n", strUtf8);
            QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
            QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
            
            QString strUnicode= utf8Codec ->toUnicode(strUtf8);
            QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode);
        
            strUtf8= ByteGb2312.data();
            printf("~~~~~ gb2312    strUtf8toGb2312:%s\n", strUtf8);
        }

修改了一下utf8ToGb2312使之转换后的gb2312字符串类型为QString:

QString utf8ToGb2312(char *strUtf8)
        {
            printf("~~~~utf8  strUtf8:%s\n", strUtf8);
            QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
            QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
            
            QString strUnicode= utf8Codec ->toUnicode(strUtf8);
            QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode);
        
            strUtf8= ByteGb2312.data();
            printf("~~~~~gb2312    strUtf8toGb2312:%s\n", strUtf8);
            return QString::fromLocal8Bit(strUtf8);//注意这里要fromLocal8Bit()
        }

转自:https://blog.csdn.net/AmyAndTommy/article/details/82256454

真正的QString转char,utf8编码转gb2312编码相关推荐

  1. Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题

    代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的.如下程序中 #define DD 1的情况下:但是如果设置了全局的utf-8,再用以前的方法: QByteArray ba= ...

  2. char qt 转unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题...

    2012-03-22 14:00 175人阅读 评论(0) 代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的.如下程序中 #define DD 1的情况下:但是如果设置了全局 ...

  3. 把UTF-8编码转换为GB2312编码

    最近在做的广告系统中,碰到了一个问题,广告系统采用的UTF-8编码,而一些使用这套广告系统的频道页面使用的是GB2312编码.当然也有使用UTF-8编码的频道使用这套广告系统. 频道页面是通过嵌入类似 ...

  4. unicode编码转gb2312编码并显示中文(cjava)

    unicode编码转gb2312编码并显示中文(c&java) unicode编码与gb2312编码没有线性关系,只能通过使用编码表的方式查找. C语言 编码表中,前半部分是gb2312编码, ...

  5. 做网站用UTF-8编码还是GB2312编码?

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. 经常我们打开外国网站的时 ...

  6. html显示蒙古语乱码,做网站用UTF-8编码还是GB2312编码?

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  7. 你还在为如何区分ASCII编码、GB2312编码、Unicod、UTF-8编码而烦恼吗,一篇文章让你柳暗花明...

    字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...

  8. linux 下URL中 UTF-8编码、GB2312编码与汉字之间的转换

    下面是UTF-8编码的转换代码 #include <string.h> #include <stdio.h> #include <stdlib.h>/* 16进制字 ...

  9. 黄聪:php中utf-8模板获取GB2312编码页面传递URL中文编码转换方法

    $w='中文参数'; mb_convert_encoding($w, 'gb2312', 'utf-8') 转载于:https://www.cnblogs.com/huangcong/archive/ ...

  10. C++将UTF-8编码的文件转化为GB2312编码

    C++将UTF-8编码的文件转化为GB2312编码 我需要对一个html网页进行解析,html是使用UTF-8编码的.但是,我使用的visual Studio 19是使用gb2312进行编码的.当读入 ...

最新文章

  1. 在Linux添加PYTHONPATH方法以及修改环境变量方法
  2. Interview:算法岗位面试—10.17早上—上海某科技公司算法岗位(偏算法,独角兽)非技术面试之比赛项目讲解和项目意义的探讨
  3. 在MyEclipse中添加 XML Catalog (xwork-validator dtd )
  4. redis缓存数据表
  5. Linux 命令之 mv -- 移动文件/重命名文件
  6. 【渝粤教育】 国家开放大学2020年春季 2772家畜环境卫生与设施 参考试题
  7. struts config xml详细解释
  8. 安卓分辨率_华为平板M6会不会是最强安卓平板?
  9. Latex 版本简历
  10. 网络编程+Socket+UDP+TCP+三次握手四次挥手
  11. css linux 等宽字体,css 等宽字体有哪些
  12. C++STL常用算法adjacent_find
  13. springboot 加载一个properties文件转换为对象、List和Map数据结构
  14. 数据分析——房源分析项目
  15. 《信息处理技术》知识点整理
  16. BP客户主数据信用数据批量修改
  17. Numpy中outer的应用
  18. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>
  19. 猎豹移动卖资产救业绩:通过裁员降成本,海外失利转移至国内市场
  20. 如何让自己的网站快速被搜索引擎找到

热门文章

  1. disc性格测试cs适合职业_DISC性格测试,高C型的人适合从事什么工作?
  2. 基于巴法云平台的天猫精灵控制开关
  3. 怎么用计算机测出来体脂,怎么测体脂比较科学
  4. NANK南卡降噪耳机和小米蓝牙耳机哪个好?谁更值得入手?
  5. linux导航改端口波特率,各大导航端口速率修改方法
  6. 开瑞k50和k50s 导航傻瓜升级方法,其他车载导航也可以参考。
  7. 一文读懂“语言模型”
  8. 【ZYNQ】从入门到秃头02 ZYNQ硬件介绍和Vivado开发流程
  9. 全国计算机大赛游戏作品,计算机作品大赛优秀作品展示---数字动漫游戏栏目
  10. lnmp一键安装包 mysql_mysql - LNMP一键安装包