大佬们,数据经过socket传输之后,显示在客户端的汉字出现乱码如何解决?-灵析社区

万码JFG3236P

问题描述 私聊模块,一个客户端发送完数据,另一个客户端在显示方面出现中文乱码。 问题出现的环境背景及自己尝试过哪些方法 尝试过在发送数据的时候使用toUtf8方法,没有效果 接受的时候使用fromUtf8,没有效果 相关代码 粘贴代码文本(请勿用截图) //私聊功能 ``` c++ void Friend::chatAlone() { //获取自己的名字和好友的名字,获取消息的内容 QListWidgetItem* lw= friendList->currentItem(); //判断是否为空 if(lw==NULL) { QMessageBox::information(this,"私聊","请选择要私聊的好友"); return; } QString st; st=lw->text().toUtf8(); QString strName=TcpClient2::getInstance().getName().toUtf8(); QString msg=inputMsg->text().toUtf8(); inputMsg->clear(); PDU* p=mkPDU(msg.size()); p->uiMsgType=ENUM_MSG_TYPE_CHAT_ALONE_REQUEST; //将获取到的数据封装到自己定义的PDU里面 strncpy(p->caData,st.toStdString().c_str(),st.size()); strncpy(p->caData+32,strName.toStdString().c_str(),strName.size()); strncpy((char*)p->caMsg,msg.toStdString().c_str(),msg.size()); TcpClient2::getInstance().getSocket()->write((char*)p,p->uiPDULen); free(p); p=NULL; showMsg->append("你对"+st+"说:"+msg); } ``` 显示消息 ``` c++ void Friend::showMs(PDU *p) { if(NULL==p) return; char name[32]={'\0'}; strncpy(name,p->caData+32,32); QString msg=QString("%1对你说:%2").arg(name).arg((char*)p->caMsg); showMsg->append(msg); } ``` 自己定义的PDU ``` c++ struct PDU { uint uiPDULen;//总的消息长度 uint uiMsgType;//消息的类型 char caData[64]; uint uiMsgLen;//实际消息长度 int caMsg[];//实际消息 }; ``` 你期待的结果是什么?实际看到的错误信息又是什么? 期待结果:中文信息可以正常显示 错误显示:你对jack说:你好杰克 jack对你说:你��������݌z��

阅读量:124

点赞量:0

问AI
你看看这张图有用吗? "https://wmprod.oss-cn-shanghai.aliyuncs.com/community/1724830575817_uPEx.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/community/1724830575817_uPEx.png) 来源:https://segmentfault.com/q/1010000043923867/a-1020000043923969