1、网上的资料:

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

  1.2、网页内容:

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

// Method 1
QString str = QString::fro mLocal8Bit("本地文本");
QString str2 = QString("本地文本"); // 乱码
// Method 2
QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for KOI8-R
QString locallyEncoded = codec->toUnicode( "显示中文" );
qDebug() << locallyEncoded << endl;
//更多细节请参见:
http://www.kuqin.com/qtdocument/qtextcodec.html
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")

// http://blog.csdn.net/changsheng230/article/details/6588447

    wchar_t *pwc = L"我是中国人";  // ZC: 这里是使用的 编码方式为"UTF-8 + BOM"
qDebug() << "(1) ==>";
for (size_t i=; i<wcslen(pwc); i++)
{
ushort us = pwc[i];
qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
}

  // ZC: QString 默认还是使用GBK
QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for KOI8-R
QString locallyEncoded = codec->toUnicode( "我是中国人" );
qDebug() << locallyEncoded << endl; QChar *pcs = (QChar*)locallyEncoded.unicode();
qDebug() << "(2) ==>";
for (int i=; i<locallyEncoded.length(); i++)
{
QChar c = pcs[i];
ushort us = c.unicode();
qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
} pcs = (QChar*)locallyEncoded.data();
qDebug() << "(3) ==>";
for (int i=; i<locallyEncoded.length(); i++)
{
QChar c = pcs[i];
ushort us = c.unicode();
qDebug() << "\t" << QString::number(us, ).leftJustified(, '');
} QTextCodec *codecUtf8 = QTextCodec::codecForName("utf-8");
QByteArray ba = codecUtf8->fromUnicode(locallyEncoded); qDebug() << "(4) ==>";
for (int i=; i<ba.length(); i++)
{
ushort us = ba[i];
us &= 0xFF;
qDebug() << "\t("<< QString::number(i).rightJustified(, '') <<")"
<< QString::number(us, ).leftJustified(, '');
} ba = locallyEncoded.toUtf8();
qDebug() << "(5) ==>";
for (int i=; i<ba.length(); i++)
{
ushort us = ba[i];
us &= 0xFF;
qDebug() << "\t("<< QString::number(i).rightJustified(, '') <<")"
<< QString::number(us, ).leftJustified(, '');
}

  3.1、打印的信息:

() ==>
""
"662f"
"4e2d"
"56fd"
"4eba"
"我是中国人" () ==>
""
"662f"
"4e2d"
"56fd"
"4eba"
() ==>
""
"662f"
"4e2d"
"56fd"
"4eba"
() ==>
( "" ) "e6"
( "" ) ""
( "" ) ""
( "" ) "e6"
( "" ) ""
( "" ) "af"
( "" ) "e4"
( "" ) "b8"
( "" ) "ad"
( "" ) "e5"
( "" ) "9b"
( "" ) "bd"
( "" ) "e4"
( "" ) "ba"
( "" ) "ba"
() ==>
( "" ) "e6"
( "" ) ""
( "" ) ""
( "" ) "e6"
( "" ) ""
( "" ) "af"
( "" ) "e4"
( "" ) "b8"
( "" ) "ad"
( "" ) "e5"
( "" ) "9b"
( "" ) "bd"
( "" ) "e4"
( "" ) "ba"
( "" ) "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. Mr Cao 的提问

    block调用时,变量的生命周期有哪几种?分别是什么样的? 98.CALayer的多个sublaye的数据结构,以及重绘顺序? 99.网路请求的超时及重试机制应该如何设计? 100.NSDiction ...

  2. Pandas之Dropna滤除缺失数据

    import pandas as pd import numpy as np from numpy import nan as NaN 一.处理Series对象 通过dropna()滤除缺失数据 fr ...

  3. SpringMyBatisDay02

    全篇概述:IOC    DI     参数值注入      注解依赖注入 1.Spring IOCIOC 全称Inversion Of Control,被翻译成控制反转控制反转指:程序中对象的获取方式 ...

  4. Summary: Deep Copy vs. Shallow Copy vs. Lazy Copy

    Object copy An object copy is an action in computing where a data object has its attributes copied t ...

  5. AO中的空间关系

    名词解释: Boundary(边界): 只有线和面才有边界.面的边界是指组成面的框架线:线的边界是指线的二个端点(即起点和终点,不包括中间部分的节点):点没有边界. Interior(内部): 除去边 ...

  6. 20154312 曾林 Exp5_MSF基础应用

    --目录-- MSF渗透测试-CVE-2017-11882 1.基础内容回答 2.实践过程记录 2.1.主动攻击实践-ms08_067 2.2.针对浏览器的攻击-ms10_046 2.3.针对客户端的 ...

  7. QQ在线客服,默认到要加好友,授权也不起作用需要先开通QQ营销服务

    QQ在线客服,默认到要加好友,授权也不起作用需要先开通QQ营销服务http://wpa.qq.com/msgrd?v=3&uin=你的客服QQ号码&site=qq&menu=y ...

  8. OAuth : open Authorization 开发授权

    OAuth : open Authorization 开发授权 用户访问慕课网,慕课网请求OAuth登陆页面,用户输入QQ号码和密码,这个页面的域名不属于慕课网是属于QQ的,随后把结果给慕课网,这个结 ...

  9. OpenCV-跟我一起学数字图像处理之拉普拉斯算子

    https://www.cnblogs.com/german-iris/p/4840647.html Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Fil ...

  10. PHP发送HTTP请求的6种方法

    方法1: 用 file_get_contents 以get方式获取内容: <?php$url = 'https://wenda.shukaiming.com/';echo file_get_co ...