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.是用以解决国际上字符 ...
随机推荐
- EBS五种安全性屏蔽解析
http://blog.11equals3.top/2018/02/09/190/ 分类帐集 定义: 分类帐集顾名思义就是分类账的集合.它是总帐提供的将相同科目表和相同日历的多个分类帐集合一起用于多分 ...
- python爬虫学习之使用XPath解析开奖网站
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件. 实例环境:pyth ...
- 高手养成计划基础篇-Linux第二季
高手养成计划基础篇-Linux第二季 本文来源:i春秋社区-分享你的技术,为安全加点温度 前言 前面我们学习了文件处理命令和文件搜索命令,简单的了解了一下Linux,但是仅仅了解这样还不行,遇 ...
- 吴恩达机器学习笔记15-假设陈述(Hypothesis Representation)
在分类问题中,要用什么样的函数来表示我们的假设呢?此前说过,希望我们的分类器的输出值在0 和1 之间,因 此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0 和1 之间.回顾在一开 ...
- 吴恩达机器学习笔记14-逻辑回归(Logistic Regression)
在分类问题中,你要预测的变量
- spring cloud config配置记录
1. spring cloud config配置记录 1.1. pom <!-- 分布式配置中心 --> <dependency> <groupId>org.spr ...
- Spark基础-scala学习(四、函数式编程)
函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数的类型推断 scala的常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala中的函数是一等公民,可 ...
- pycharm注册码(不断更新)
2019.3.13测试可用 MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWd ...
- Python的GUI用法1
代码: #python GUI的例子1 import tkinter as tk class Window: def __init__(self,master): frame = tk.Frame(m ...
- python学习的准备工作
1.python安装 1.下载: https://www.python.org/downloads/windows/ 2.安装: 安装很简单,就是下一步,只是在最后要勾选上 Add Python 3. ...