33.QT-UTF8,GBK互转
首先需要用到QString的静态成员函数来获取字符数组:
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编码对象:
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); //获取UTF-8编码对象
示例-utf8转为GBK
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[]={0xe5,0x95,0x8A,0xE5,0x93,0x88}; //啊哈 utf-8编码
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); //获取UTF-8编码对象
QString unicode = utf8->toUnicode(encode,); //通过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=; i <arr.size();i++)
{
qDebug("%x",(unsigned char)arr[i]);
}
打印:

示例-GBK转为UTF8
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=; i <arr.size();i++)
{
qDebug("%x",(unsigned char)arr[i]);
}
打印:

33.QT-UTF8,GBK互转的更多相关文章
- utf8 gbk 互转
public static function utf8_to_gbk($utfstr) { return iconv("utf-8", "gbk//IGNORE" ...
- Golang中GBK和UTF8编码格式互转
Golang中GBK和UTF8编码格式互转 需求 已知byte数组的编码格式转换 实现代码 package utils import ( "bytes" "golang. ...
- GBK编码和UTF-8编码互转的大坑
这几天遇到一个BUG,问题很简单,解决却花了3.4天,特意记录下来. linux环境下,将默认编码设置为GBK以后,运行GBK编码的脚本,调用一个Java的jar包,然后总jar包中返回GBK字符串. ...
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- UTF-8 ->GBK
/** * GBK->UTF8 */ //方法一 旧方法 //NSString *encode1 = [@"%E6%88%91" stringByReplacingPerce ...
- 字符截取 支持UTF8/GBK
); $n = $tn = $noc = ; || $t == || ( <= $t && $t <= )) { ...
- Eclipse 乱码解决方案(UTF8 -- GBK)
UTF8 --> GBK; GBK --> UTF8 eclipse的中文乱码问题,一般不外乎是由操作系统平台编码的不一致导致,如Linux中默认的中文字体编码问UTF8, 而Wind ...
- 【转】Eclipse 乱码 解决方案总结(UTF8 -- GBK)
转载自: http://www.cnblogs.com/bluestorm/archive/2012/09/20/2695567.html UTF8 --> GBK; GBK --> ...
- Eclipse 乱码 解决方案总结(UTF8 -- GBK)
UTF8 --> GBK; GBK --> UTF8 eclipse的中文乱码问题,一般不外乎是由操作系统平台编码的不一致导致,如Linux中默认的中文字体编码问UTF8, 而Wind ...
- UTF-8 GBK UTF8 GB2312之间的区别和关系
UTF-8 GBK UTF8 GB2312之间的区别和关系 UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符 ...
随机推荐
- Python 基础API
针对python的os库一些API记录,觉得python的命名并不好,很多API看名字,并不知道具体功能是什么 1. os.path.basename() 得到文件名称,不包括路径,例子:/var/t ...
- 像纸质笔记本一样给div,textarea添加行的分割线
想要给textarea添加一个背景图来实现 但是背景图有几个问题, 1.每个div或者textarea的line-height不一样,对于每个不同的line-height都需要一个不同的背景图 2.当 ...
- Windows下Tomcat内存占用过高问题跟踪(ProcessExplorer+jstack)
一.问题描述 Tomcat下面部署很多个java项目的war包,tomcat启动一段时间后,发现cpu占用过高,整个界面卡死! 二.通过process explorer查看java进程下的线程 pro ...
- 如果这样来理解HTTPS,一篇就够了!
1.前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢. 这其实是个误解:当今主流的移动端IM数据通信,总结下来无外 ...
- GitHub 近 100,000 程序员“起义”:向“996”开炮!
作者 | 伍杏玲 出品 | 程序人生(ID:coder_life) 平常CSDN推送关于程序员加班的文章时,很多程序员边吐槽边调侃地留言“比拼”:“我们也是996”.“007来报道”…… 可在简单的数 ...
- 在linux系统上文件传输的小技巧
各位做运维的小伙伴,你是不是常常在为文件传到linux服务器上感到头疼呢,我们知道常用的文件传输工具有好多,比如xftp,winscp等,但是有没有比这更简单的呢?当然是有的呢,下面给大家介绍下: y ...
- [原创]K8PackWebShell ASPX整站打包工具
[原创]K8PackWebShell ASPX整站打包工具[K.8](有无Rar执行权限都可以) 2011-06-11 01:49:21| 分类: 原创工具 Name: K8PackWebShell ...
- Mac OS Eclipse 调试快捷键不好使(失效)的情况
Eclipse调试使用的F5 F6 F8一直都好用,结果一次调试后忽然不好使. 问题原因,尚未知晓. 解决办法,重启机器.
- 《CLR Via C#》读书笔记:26.线程基础
一.线程开销 操作系统创建线程是有代价的,其主要开销在下面列举出来了. 内存开销 线程内核对象 拥有线程描述属性与线程上下文,线程上下文占用的内存空间为 x86 架构 占用 700 字节.x64 架构 ...
- 基于Mono和VSCode打造轻量级跨平台IDE
近期Visual Studio推出Mac版本号的消息迅速在技术圈里刷屏,当project师们最喜欢的笔记本电脑Mac,邂逅地球上最强大的集成开发环境Visual Studio的时候,会碰撞出如何精 ...