Qt字符编码转换(UTF-8转换为GBK)
字符串编码格式转换
很多时候可能需要字符串编码的转换,最近我需要获取⼀段字符串的长度,我strlen() 获取的’你好’ 的字节长度为6 ,我记得每个汉字占⽤
2字节 ,查了⼀下 UTF-8格式 汉字(含繁体)占3字节,需要转下码.
编码知识
Qt常见的两种编码是:UTF-8和GBK
unicode编码转换二进制UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是⽤以解决国际上字符的⼀种多字节编码,它对英⽂使⽤8位(即⼀个字节),GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的⽂字编码是⽤双字节来表⽰的,即不论中、英⽂字符均使⽤双字节来表⽰,为了区分中⽂,将
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
在简体中⽂windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使⽤0x80~0xFF范围的2个字节来表⽰1个中⽂字符。0x00~0x7F之间的字符,依旧是上⾯说了 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, mos 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-1to10
ISO 8859-13to16
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-1250to1258
译⽂:
QTextCodec类提供⽂本编码之间的转换。
Qt使⽤Unicode存储、绘制和操作字符串。在许多情况下,您可能希望处理使⽤不同编码的数据。例如,⼤多数⽇本⽂档仍然存储在Shift-JIS或ISO 2022 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-1to10
ISO 8859-13to16
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-1250to1258
我⽤到的就很简单 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 -> unicode
QString strUnicode= utf8->Local8Bit().data());
//2. unicode -> gbk, 得到QByteArray
QByteArray gb_bytes= gbk->fromUnicode(strUnicode);
//gbk -> utf8
//1. gbk to unicode
strUnicode=gbk->Local8Bit().data());
//2. unicode -> utf-8
QByteArray utf8_bytes=utf8->fromUnicode(strUnicode);
格式转换为 gbk 以后 汉字就是2字节了,搞定
-来⾃98年菜鸡⼀枚,请⼤佬们多多关照!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。