分享

qt 下 utf8编码与gbk编码的相互转换(附实例)

 QomoIT 2018-05-22
                  /*
 * author: hjjdebug
 * date: 2017年 09月 01日 星期五 22:35:38 CST
 * 说明:
 * 有一个打印机,只支持gdk编码, 而我的程序是linux, utf8是本地编码.
 我需要一个简单的utf8向gdk转换的程序. 网上大多不能直接使用,
 下面附上自己整理和测试的代码. 花了我不少时间, QT 环境.
代码解读: utf8 与 gdk 不能直接进行转换,而需要借助于unicode来进行变换.
utf8向gdk转换的过程是utf8->unicode, unicode->gdk.
第一步变换需要utf8 QTextCodec,
第二步变换需要gdk QTextCodec,

同理, gbk 向utf8转换也是一样

请重点关注他们的char *p内容的变化.
至于包在QString里,还是包在QByteArray里,这不重要.



付测试代码!!
"您好" utf8编码: e6 82 a8 e5 a5 bd
"您好" gbk编码:  c4 fa ba c3
*/


  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <QString>  
  4. #include <QTextCodec>  
  5.   
  6. void printContent(char *p)  
  7. int main()  
  8. {  
  9.     QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");    
  10.     QTextCodec::setCodecForLocale(utf8);  
  11.     QTextCodec::setCodecForCStrings(utf8);  
  12.     QTextCodec* gbk = QTextCodec::codecForName("gbk");  
  13.   
  14.     unsigned int i;  
  15.     QString str1="您好";  
  16.     char *p=str1.toLocal8Bit().data(); //如此可以等到它的char*  
  17.     printContent(p);      
  18.       
  19.     //utf8 -> gbk  
  20.     //1. utf8 -> unicode  
  21.     QString strUnicode= utf8->toUnicode(str1.toLocal8Bit().data());  
  22.     //2. unicode -> gbk, 得到QByteArray  
  23.     QByteArray gb_bytes= gbk->fromUnicode(strUnicode);  
  24.     p =  gb_bytes.data(); //获取其char *  
  25.     printContent(p);      
  26.   
  27.     //gbk -> utf8  
  28.     //1. gbk to unicode  
  29.     strUnicode=gbk->toUnicode(p);  
  30.     //2. unicode -> utf-8  
  31.     QByteArray utf8_bytes=utf8->fromUnicode(strUnicode);  
  32.     p = utf8_bytes.data(); //获取其char *  
  33.     printContent(p);      
  34. }  
  35.   
  36. void printContent(char *p)  
  37. {  
  38.     //打印其内容, char *  
  39.     for(i=0;i<strlen(p);i++)  
  40.         printf("%02x ",(unsigned char)p[i]);  
  41.     printf("\n");  
  42. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多