字符串编码格式转换

很多时候可能需要字符串编码的转换,最近我需要获取一段字符串的长度,我strlen() 获取的’你好’ 的字节长度为6 ,我记得每个汉字占用2字节 ,查了一下 UTF-8格式 汉字(含繁体)占3字节,需要转下码.

编码知识

Qt常见的两种编码是:UTF-8和GBK
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。GBK是GB2312的扩展,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
在简体中文windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使用0x80~0xFF范围的2个字节来表示1个中文字符。0x00~0x7F之间的字符,依旧是1个字节代表1个字符。Unicode(UTF-16)编码则所有字符都用2个字节表示。

上面说了 GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换 但是我试了下 utf-8 可以直接转换为 gbk

Qt中 提供了 一个字符串转码的类 QTextCodec

The QTextCodec class provides conversions between text encodings.
Qt uses Unicode to store, draw and manipulate strings. In many situations you may wish to deal with data that uses a different encoding. For example, most Japanese documents are still stored in Shift-JIS or ISO 2022-JP, while Russian users often have their documents in KOI8-R or Windows-1251.
Qt provides a set of QTextCodec classes to help with converting non-Unicode formats to and from Unicode. You can also create your own codec classes.
The supported encodings are:
Big5
Big5-HKSCS
CP949
EUC-JP
EUC-KR
GB18030
HP-ROMAN8
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 to 10
ISO 8859-13 to 16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
KOI8-R
KOI8-U
Macintosh
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
Windows-1250 to 1258
译文:
QTextCodec类提供文本编码之间的转换。
Qt使用Unicode存储、绘制和操作字符串。在许多情况下,您可能希望处理使用不同编码的数据。例如,大多数日本文档仍然存储在Shift-JIS或ISO 2022-JP格式,而俄罗斯用户的文档通常存储在KOI8-R或windows 1251格式。
Qt提供了一组QTextCodec类,以帮助将非Unicode格式转换为Unicode格式。您还可以创建自己的编解码器类。
支持的编码是:
Big5
Big5-HKSCS
CP949
EUC-JP
EUC-KR
GB18030
HP-ROMAN8
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 to 10
ISO 8859-13 to 16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
KOI8-R
KOI8-U
Macintosh
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
Windows-1250 to 1258

我用到的就很简单 utf-8 转为 gbk
如果你原本编码不是 utf-8 就要先转换 utf-8 这里我们假设 原本编码也不是utf-8

#include <QTextCodec>QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");  QTextCodec::setCodecForLocale(utf8);QTextCodec* gbk = QTextCodec::codecForName("gbk");QString str1="您好";//utf8 -> gbk//1. utf8 -> unicodeQString strUnicode= utf8->toUnicode(str1.toLocal8Bit().data());//2. unicode -> gbk, 得到QByteArrayQByteArray gb_bytes= gbk->fromUnicode(strUnicode);//gbk -> utf8//1. gbk to unicodestrUnicode=gbk->toUnicode(str1.toLocal8Bit().data());//2. unicode -> utf-8QByteArray utf8_bytes=utf8->fromUnicode(strUnicode);

格式转换为 gbk 以后 汉字就是2字节了,搞定

        -来自98年菜鸡一枚,请大佬们多多关照!

Qt 字符编码转换(UTF-8 转换为 GBK)相关推荐

  1. Qt 字符编码转换(UTF-8 转换为 GBK) \u7528\u6237\u672a\u7b7e\u7ea6

    UTF-8 转换为 GBK \u7528\u6237\u672a\u7b7e\u7ea6 编码知识(\u7528\u6237\等的就是Unicode编码) 转换编码示例 编码知识(\u7528\u62 ...

  2. Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    文章目录 前言 简述 ASCII GBK Unicode UTF-8 应用场景 开发环境 编码转换 16进制数值转换为16进制字符 16进制数值转化为字符串 16进制字符串转换为Unicode字符串 ...

  3. Android字符编码转换,GBK转UTF-8

    Android字符编码转换,GBK转UTF-8 网上看了很多都不能用,最后看到这个方法,很靠谱,分享给大家! String str; str = new String(str.getBytes(&qu ...

  4. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  5. iconv 判断字符编码_iconv字符编码转换全攻略

    iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以"方便"的完成几乎所有的编码转换工作.说简单是因为,它常用的 ...

  6. 字符编码之间的相互转换 UTF8与GBK

    原文地址为: 字符编码之间的相互转换 UTF8与GBK UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换 CChineseCode 一 预备知识 1,字符:字符是抽象的最小文本单位.它 ...

  7. android 使用icon进行字符编码转换

    在使用ndk开发应用程序时,有时需要字符编码转换,这里使用开源库icon进行字符编码转换,代码如下 char * convertString(const char * fromCode, const ...

  8. 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8

    字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...

  9. html字符 编码转换,HTML字符编码

    字符编码是将字节转换为字符的方法.要正确验证或显示HTML文档,程序必须选择正确的字符编码. 在计算机上使用的最常见的字符集或字符编码是ASCII美国信息交换标准代码,这可能是电子编码文本中使用最广泛 ...

  10. c语言使用iconv函数实现字符编码转换

    c语言使用iconv函数实现字符编码转换 linux下提供了iconv库来实现字符编码转换,先介绍下命令行: iconv [-f encoding] [-t encoding] [inputfile ...

最新文章

  1. 缩短网址将成微博的重要安全性问题
  2. 信息学复赛用linux,NOIP/CSPJ 复赛中noilinux里的atbiter测评机的使用(附数据)
  3. python学习第二十八节(进程,线程)
  4. 1.1.3 计算机的分类与发展方向(电子计算机、计算机按指令和数据流分类、计算机发展趋势正向着“两级”分化)
  5. Vue——使用element-resize-detector监听DOM时ID重复时移除监听器时错误解决方案
  6. c++ 嵌套私有类_嵌套类和私有方法
  7. threejs精灵(Sprite)
  8. 又不能起床python好学吗
  9. js选择html元素,JavaScript中获取HTML元素值的三种方法
  10. 你没听过的IT技术解读,能秒懂的都是老司机...
  11. .NET Framework高低版本兼容问题解决办法
  12. 如何批量将 Xls 格式的 Excel 文档转为 Xlsx 格式
  13. 育网云盘签约北京市大兴区黄村镇第一中心小学云端租赁服务
  14. 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
  15. java实现的聊天程序
  16. 现代C++之手写智能指针
  17. lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型
  18. NAS如何设置硬盘休眠及定时开关机
  19. Eboot代码流程 [转]
  20. Android 10 去掉系统默认谷歌输入法

热门文章

  1. 如何通过企业微信做精细化社群运营
  2. UE4 WebBrowser插件版本
  3. python画正切函数_Python
  4. xshell中文问号乱码
  5. cat6 万兆_超六类屏蔽网线CAT6AF/FTP10G万兆过测试工程网线益朗通信科技冀州
  6. H5网页播放器EasyPlayer如何实现iOS端H.265视频全屏播放效果?
  7. 微信小程序图片上传uploadfile失败
  8. 支持有道词典单词本更新
  9. CentOS dstat 命令详解(二)参数详解
  10. Java入门基础第3天《使用记事本编写运行Java程序》