前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >33.QT-UTF8,GBK互转

33.QT-UTF8,GBK互转

作者头像
诺谦
发布2018-07-30 11:24:10
1.8K0
发布2018-07-30 11:24:10
举报
文章被收录于专栏:Linux驱动

首先需要用到QString的静态成员函数来获取字符数组:

代码语言:javascript
复制
QByteArray QString::toLocal8Bit () ;
                        //获取字节数组对象
char * QByteArray::data ();        //通过字节数组对象的成员data函数,获取char数组

QTextCodec编码类介绍

互转主要用到这个类,通过该类可以获取编码对象,其中常见支持:

  • UTF-8
  • UTF-16  //默认大端
  • UTF-16BE   //大端,大数据开头, 比如字符a=00 61
  • UTF-16LE   //小端,小数据开头, 比如字符a=61 00
  • UTF-32
  • UTF-32BE             
  • UTF-32LE      
  • GB2312
  • GBK等

比如获取utf-8编码对象:

代码语言:javascript
复制
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); //获取UTF-8编码对象

示例-utf8转为GBK

代码语言:javascript
复制
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));    //设置本地编码对象
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));  //设置QString编码对象

     //utf8向gdk转换的过程是utf8->unicode, unicode->gdk
     //在PC,Unicode一般代表utf-16,而utf-8是单独列出来的
     //啊的gbk编码: 0xB0A1            啊的utf8编码:0xE5958A
     //哈的gbk编码: 0xB9FE            哈的utf8编码:0xE59388

    char encode[6]={0xe5,0x95,0x8A,0xE5,0x93,0x88};             //啊哈 utf-8编码
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");       //获取UTF-8编码对象
    QString  unicode = utf8->toUnicode(encode,6);               //通过UTF-8编码对象将啊哈转为utf-16

    QTextCodec *gbk = QTextCodec::codecForName("GBK");          //获取GBK编码对象
    QByteArray arr=gbk->fromUnicode(unicode);                   //从Unicode编码转为自身编码类型(GBK)
    qDebug()<<QString::fromLocal8Bit(arr);                     //打印GBK码

    qDebug()<<arr.size();
    for(int i=0; i <arr.size();i++)
    {
        qDebug("%x",(unsigned char)arr[i]);
    }

打印:

示例-GBK转为UTF8

代码语言:javascript
复制
 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));    //设置本地编码对象
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));  //设置QString编码对象


     //啊的gbk编码: 0xB0A1            啊的utf8编码:0xE5958A
     //哈的gbk编码: 0xB9FE            哈的utf8编码:0xE59388

     QString str="啊哈";               //对应编码为:  0xB0A1  0xB9FE

     QTextCodec *gbk = QTextCodec::codecForName("gbk");

     QString unicode=gbk->toUnicode(str.toLocal8Bit());    //通过gbk编码对象将啊哈转为utf-16


     QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");

     QByteArray arr=utf8->fromUnicode(unicode);           //从Unicode编码转为自身编码类型(utf-8)

     qDebug()<<arr.size();
     for(int i=0; i <arr.size();i++)
     {
         qDebug("%x",(unsigned char)arr[i]);
     }

 打印:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档