std::string,QString,QByteArray之间的转换与编码

目录

一个可以检验编码的网站

std::string转QString

QString转std::string

QByteArray将字节流转换成ACSII编码

QByteArray将ACSII编码转字节流

QByteArray转char、转QString

QString转QByteArray

将字节流转成QString

QString转char

其他一些博客

编码转换问题

常见编码定义


一个可以检验编码的网站

汉字字符集编码查询

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)之别。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值