目录
一个可以检验编码的网站
std::string转QString
string s= "111";
QString str= QString::fromStdString(s);
含中文时的转换:
std::string str = "小明";
QString Name = QString::fromLocal8Bit(str.c_str());//若str的编码为gbk
QString Name = QString::fromUtf8(str.c_str());//若str的编码为utf-8
QString转std::string
//方法1
QString str = "hello你好";
QByteArray data = str.toLocal8Bit();
std::string strdata = std::string(data);
//方法2
QString str = "hello你好";
std::string strdata = str.toStdString();
QByteArray将字节流转换成ACSII编码
QByteArray byt("123456");
QByteArray byteHex = byt.toHex();
qDebug()<<"QByteArray将字节流转换成ACSII编码:"<<byteHex;
"313233343536"
QByteArray将ACSII编码转字节流
QByteArray bytee("31323334");
QByteArray byteFromHex = QByteArray::fromHex(bytee);
qDebug()<<"QByteArray将ACSII编码转字节流:"<<byteFromHex;
"1234"
QByteArray转char、转QString
//QByteArray
QByteArray arr("123abc我");
qDebug()<<"QByteArray:"<<arr;
"123abc\xE6\x88\x91"
//QByteArray转char
char* aa=arr.data();
qDebug()<<"QByteArray转char:"<<aa;
123abc我
//QByteArray转QString
QString str(arr);
qDebug()<<"QByteArray转QString:"<<str;
"123abc我"
QString转QByteArray
QString st("123abc小马哥");
QByteArray byte1 = st.toLatin1(); //按照ASCII编码转换,无法转换中文
QByteArray byte2 = st.toUtf8(); //按照Utf-8编码转换,可以转换中文
QByteArray byte3=st.toLocal8Bit();//按照GBK转换,可以转换中文
qDebug()<<"QString转QByteArray转ASCLL:"<<byte1;
qDebug()<<"QString转QByteArray转UTF-8:"<<byte1;
qDebug()<<"QString转QByteArray转GBK:"<<byte1;
"123abc???"
"123abc???"
"123abc???"
将字节流转成QString
QString str=QString::fromLocal8Bit(array);//按照GBK转换,可以转换中文
QString str=QString::fromUtf8(array);//按照Utf-8转换,可以转换中文
QString str=QString::fromLatin1(array);//按照ASCLL转换,可以转换中文
QString转char
QString str1("123abc小马哥");
QByteArray byte = str1.toUtf8();
char* str2 = byte.data();
qDebug()<<"QString转char"<<str2;
123abc小马哥
原文链接:https://blog.csdn.net/weixin_45304839/article/details/128827741
转换QString的编码格式
//编码转换-gbk转utf8
std::string json = xpack::json::encode(cmd);//以gbk编码的json
QString gbkstr = QString::fromLocal8Bit(json.c_str());//以gbk编码的QString
QByteArray utf8ByteArray = gbkstr.toUtf8();//将gbk转换为utf8
QString utf8Str = QString::fromUtf8(utf8ByteArray);//以utf8编码的QString
其他一些博客
QString、Qbytearray、string的相互转换及相关问题
Qt,C++中QString,string,char数组等常用格式转换大总结
【QT】QByteArray、QString、char* 的相互转化(文本形式、二进制、十六进制)
编码转换问题
来自Qt官方文档
//QByteArray -> QString
QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);
//QString -> QByteArray
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);
支持的编码
- 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
常见编码定义
GB2312编码:1981年5月1日实施的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。自2017年3月23日起,该标准转化为推荐性标准:GB/T2312-1980,不再强制执行。
BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
GB18030编码:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。2005年11月8日,发布了修订版本:GB18030-2005,共收录汉字七万余个。2022年7月19日,发布了第二次修订版本:GB18030-2022,收录汉字总数八万余个。
Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode采用四个字节为每个字符编码。
UTF-8和UTF-16编码:Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。