1、网上的资料:

  1.1、参考网址:http://blog.csdn.net/changsheng230/article/details/6588447

  1.2、网页内容:

Qt 使用Unicode编码来存储操作字符串,但很多情况下,我们不得不处理采用其他编码格式的数据,举例来说,中文多采用GBK和Big5编码,而日本则多采用Shift-JIS or ISO2022编码。本文将讨论如何将其他编码格式的字符串转化成采用Unicode编码的QString

  1. // Method 1
  2. QString str = QString::fro mLocal8Bit("本地文本");
  3. QString str2 = QString("本地文本"); // 乱码
  4. // Method 2
  5. QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for KOI8-R
  6. QString locallyEncoded = codec->toUnicode( "显示中文" );
  7. qDebug() << locallyEncoded << endl;
  1. //更多细节请参见:
  1. http://www.kuqin.com/qtdocument/qtextcodec.html
  1. http://blog.csdn.net/catamout/article/details/5675878

2、我的理解

  QString在底层是使用Unicode来存储 字符串 的(Java的String也是这样),Unicode 也是一种编码的方式 且 它是用2个字节来存储一个字符的(宽字符),不管是 英文的一个单词/中文的一个汉字/等 它都是使用 2个字节来存储。

  Unicode作为一种中间状态存储在QString中,不同编码方式(如 GBK/utf-8/等)的字符串 先通过它们的编码方式 转码成Unicode(也就是QString),然后 我们需要什么编码方式 再从Unicode转为目标的编码方式的 字节数组。

  ZC: 使用中,与Java不同之处:(需要注意)
    我的理解是这样的:

3、我的测试代码:(该cpp文件编码方式为"UTF-8 + BOM")

  1. // http://blog.csdn.net/changsheng230/article/details/6588447
  2.  
  3. wchar_t *pwc = L"我是中国人";  // ZC: 这里是使用的 编码方式为"UTF-8 + BOM"
  4. qDebug() << "(1) ==>";
  5. for (size_t i=; i<wcslen(pwc); i++)
  6. {
  7. ushort us = pwc[i];
  8. qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
  9. }

  10.   // ZC: QString 默认还是使用GBK
  11. QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for KOI8-R
  12. QString locallyEncoded = codec->toUnicode( "我是中国人" );
  13. qDebug() << locallyEncoded << endl;
  14.  
  15. QChar *pcs = (QChar*)locallyEncoded.unicode();
  16. qDebug() << "(2) ==>";
  17. for (int i=; i<locallyEncoded.length(); i++)
  18. {
  19. QChar c = pcs[i];
  20. ushort us = c.unicode();
  21. qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
  22. }
  23.  
  24. pcs = (QChar*)locallyEncoded.data();
  25. qDebug() << "(3) ==>";
  26. for (int i=; i<locallyEncoded.length(); i++)
  27. {
  28. QChar c = pcs[i];
  29. ushort us = c.unicode();
  30. qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
  31. }
  32.  
  33. QTextCodec *codecUtf8 = QTextCodec::codecForName("utf-8");
  34. QByteArray ba = codecUtf8->fromUnicode(locallyEncoded);
  35.  
  36. qDebug() << "(4) ==>";
  37. for (int i=; i<ba.length(); i++)
  38. {
  39. ushort us = ba[i];
  40. us &= 0xFF;
  41. qDebug() << "\t("<< QString::number(i).rightJustified(, '') <<")"
  42. << QString::number(us, ).leftJustified(, '');
  43. }
  44.  
  45. ba = locallyEncoded.toUtf8();
  46. qDebug() << "(5) ==>";
  47. for (int i=; i<ba.length(); i++)
  48. {
  49. ushort us = ba[i];
  50. us &= 0xFF;
  51. qDebug() << "\t("<< QString::number(i).rightJustified(, '') <<")"
  52. << QString::number(us, ).leftJustified(, '');
  53. }

  3.1、打印的信息:

  1. () ==>
  2. ""
  3. "662f"
  4. "4e2d"
  5. "56fd"
  6. "4eba"
  7. "我是中国人"
  8.  
  9. () ==>
  10. ""
  11. "662f"
  12. "4e2d"
  13. "56fd"
  14. "4eba"
  15. () ==>
  16. ""
  17. "662f"
  18. "4e2d"
  19. "56fd"
  20. "4eba"
  21. () ==>
  22. ( "" ) "e6"
  23. ( "" ) ""
  24. ( "" ) ""
  25. ( "" ) "e6"
  26. ( "" ) ""
  27. ( "" ) "af"
  28. ( "" ) "e4"
  29. ( "" ) "b8"
  30. ( "" ) "ad"
  31. ( "" ) "e5"
  32. ( "" ) "9b"
  33. ( "" ) "bd"
  34. ( "" ) "e4"
  35. ( "" ) "ba"
  36. ( "" ) "ba"
  37. () ==>
  38. ( "" ) "e6"
  39. ( "" ) ""
  40. ( "" ) ""
  41. ( "" ) "e6"
  42. ( "" ) ""
  43. ( "" ) "af"
  44. ( "" ) "e4"
  45. ( "" ) "b8"
  46. ( "" ) "ad"
  47. ( "" ) "e5"
  48. ( "" ) "9b"
  49. ( "" ) "bd"
  50. ( "" ) "e4"
  51. ( "" ) "ba"
  52. ( "" ) "ba"

4、

5、

字符集(编码)转换_Qt532_QString的更多相关文章

  1. 字符集(编码)转换_Linux

    ZC: 来自 我的项目 czgj 1.代码: #include <stdio.h> #include <iconv.h> #include <string.h> / ...

  2. 字符集(编码)转换_Windows

    ZC: 来自 我的项目 czgj ZC: (1).经过测试 MultiByteToWideChar(...) 返回的是 (需要的)WideChar[宽字符]的个数:(2).WideCharToMult ...

  3. 关于JS的编码转换问题

    在进行JS开发过程中,尤其是在开发报表时,报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号或乱码等等一系列不能正常显示的情况. 这是由于浏览器和报 ...

  4. 帆软报表FineReport数据库连接编码转换

    1. 问题描述 数据库会以某种编码方式保存与读取数据,FineReport解析时默认使用GBK字符集,若数据库端编码与设计器端编码不一致时,就会导致中文及特殊字符的乱码. FineReport在定义数 ...

  5. java Unicode、ISO-8859-1、GBK、UTF-8编码转换深入浅出

    参考文献:搞懂ASCII, ISO8859-1, ANSI和Unicode Unicode百度文献 ISO-8859-1百度文献 注: 1.utf-8虽然是国际编码,对不同范围的字符使用不同长度的编码 ...

  6. Base64的编码转换方式

    下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...

  7. 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030

    vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...

  8. 理解perl的编码转换——utf8以及乱码

    工作需要,闲暇之余,仔细研究了一下脚本乱码的问题 1. vim新建的文件 1)在linux命令行 vim命令建立的文件,如果内容中不出现中文,默认是ASCII.那么用notepad++打开的时候,就是 ...

  9. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

随机推荐

  1. html10

    1.动画fadeIn() - 淡入fadeOut() - 淡出 -通过改变透明度(opacity隐藏之后依旧占着位置)实现节点的显示和隐藏show() - 显示hide() - 隐藏 -同时改变节点的 ...

  2. js五星好评2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 【Java】系统漏洞:关于用户登录后操作的注意事项

    项目背景: SpringMVC + Mybatis  + MySql数据库(javaWeb项目开发) 相关模块:登录,个人详细信息修改,订单详情查询 相关漏洞介绍: 1.登录的验证码:登录的验证码一定 ...

  4. STA分析(五) parastics

    互联线的寄生参数 一般一个cell或者block的连接pin就叫做一个net.在物理实现的时候,一条net可能会穿过几层metal,因为每个metal层的电阻,电容值都不一样.所以,在分析 net的寄 ...

  5. Baidu 推荐技术平台(offer)

    一面: 1 自我介绍 项目介绍. 2 RNN 原理,LSTM原理,GBDT原理,XGB与GBDT的改进. 3 多模匹配,字典树,链表环找入口. 4 c++ static 关键字 5 多线程,线程安全 ...

  6. redis windows版本下载

    https://github.com/dmajkic/redis/downloads http://windows.php.net/downloads/pecl/snaps/redis/3.1.4rc ...

  7. CodeForces - 946D Timetable (分组背包+思维)

    题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待\(j-i+1\)个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内 ...

  8. VMWare中桥接、NAT、Host-only

    1.概述 2.bridged(桥接模式) 3.NAT(网络地址转换模式) 4.host-only(主机模式) 5.replicate physical network connection state ...

  9. 让nodepad++编辑时链接能双击打开

    让nodepad++编辑时链接能双击打开,Notepad++自动把代码或编辑状态里的链接或URL地址转成可点击的链接,当你双击该URL会打开相应的网页地址,不用复制地址到浏览器打开了,非常方便好用. ...

  10. 容器技术与DevOps

    容器技术的使用支撑了目前 DevOps 三大主要实践:工作流.及时反馈.持续学习. 有人说容器技术与 DevOps 二者在发展的过程中是互相促进的关系.得益于 DevOps 设计理念的流行,容器生态系 ...