QString互转string中文乱码问题

文章主要讨论了在Qt环境中,使用QTextEdit输入中文后,通过QString与std::string之间的转换出现乱码的问题。作者提供了通过QByteArray解决该问题的方法,并指出在结构体或中文字符串转string再转QString时,数据大小可能会变化,可能导致乱码和尺寸不符的情况。
摘要由CSDN通过智能技术生成

QString互转string中文乱码问题

遇到一个在QTextEdit里输入中文转换成string传输后再转换为QString显示乱码问题
情况简化大概是下这样:

    QTextEdit qEdit;
    //在qEdit里写了中文
    QString s=qEdit.toPlainText();//用QString接收文本
    string stmp=s.toStdString();
    QString ss(QString::fromStdString(stmp));
    qDebug()<<ss<<endl;//这样打印出来的ss是中文乱码的

解决方法

    QByteArray bitarray(s.c_str(),s.length());
    QString ss=bitarray;//解决QString和string互转中文乱码问题
	qDebug()<<ss<<endl;//正常输出

另外

有两个坑:
struct或中文转string再转QString再转换回string大小会变

    struct package{
        int a;
        int b;
        char c;
        int d;
    };//size:16字节
    package pkg;
    pkg.a=5;
    std::string text("你好");
    std::string text_1((char*)(&pkg),sizeof(pkg));
    qDebug()<<"text size:"<<text.size()<<endl;
    qDebug()<<"text_1 size:"<<text_1.size()<<endl;
    QString qText(QString::fromStdString(text));
    QString qText_1(QString::fromStdString(text_1));
    qDebug()<<"qText size:"<<text.size()<<endl;
    qDebug()<<"qText_1 size:"<<text_1.size()<<endl;
    std::string text_2=qText.toStdString();
    std::string text_3=qText_1.toStdString();
    qDebug()<<"text_2 size:"<<text_2.size()<<endl;
    qDebug()<<"text_3 size:"<<text_3.size()<<endl;

打印输出:

text size: 4 

text_1 size: 16 

qText size: 4 

qText_1 size: 16 

text_2 size: 12 

text_3 size: 22 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值