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. [转]Tesseract-OCR (Tesseract的OCR引擎最先由HP实验室于1985年开始研发)

    光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程.OCR技术非常专业,一般多是印刷.打印行 ...

  2. python写http post请求的四种请求体

      Web自动化测试(25)  HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.常见的四种编码方式如下: 1.appli ...

  3. win 7 和 winserver 2008 下,布署网站遇到的错误解决方法

    本人亲测,有效. 1.如果只列出目录: web.config的system.webServer配置节下是否有这个: <modules runAllManagedModulesForAllRequ ...

  4. Oracle存储过程中游标的简单使用

    存储过程中查询语句如何返回多行结果? 我们知道,如果存储过程中查询语句有多行结果输出,会报错:ORA-01422: exact fetch returns more than requested nu ...

  5. sql server删除重复数据,保留第一条

    SELECT * FROM EnterpriseDataTools.Enterprise.CompanyMainwhere CompanyNo in (select CompanyNo from En ...

  6. # 20155327 2016-2017-3 《Java程序设计》第5周学习总结

    20155327 2016-2017-3 <Java程序设计>第5周学习总结 教材学习内容总结 理解异常架构 粉红色的是受检查的异常(checked exceptions),其必须被 tr ...

  7. MATLAB 简明教程

    MATAB 是我学习和接触的第一种工具类的编程语言,最早可以追溯到大一上数学分析这门课的时候.MATLAB既是一种软件也是一门编程语言,MATLAB功能强大在理科和工科中运用较多. MATLAB 是 ...

  8. printf("%d",5.01)和printf("%f",5)的输出结果

    printf(); printf("%d\n",5.01); printf(); printf(.f); 输出结果: 看到结果,会感觉非常奇怪.1处怎么会输出0呢?2又为何会显示这 ...

  9. MySQL Crash Course #04# Chapter 7. 8 AND. OR. IN. NOT. LIKE

    索引 AND. OR 运算顺序 IN Operator VS. OR NOT 在 MySQL 中的表现 LIKE 之注意事项 运用通配符的技巧 Understanding Order of Evalu ...

  10. Python面试题之装饰器漫谈

    讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它 ...