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