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

问题描述

私聊模块,一个客户端发送完数据,另一个客户端在显示方面出现中文乱码。

问题出现的环境背景及自己尝试过哪些方法

尝试过在发送数据的时候使用toUtf8方法,没有效果
接受的时候使用fromUtf8,没有效果

相关代码

粘贴代码文本(请勿用截图)
//私聊功能

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);

}

显示消息

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

struct PDU
{
    uint uiPDULen;//总的消息长度
    uint uiMsgType;//消息的类型
    char caData[64];
    uint uiMsgLen;//实际消息长度
    int caMsg[];//实际消息
};

你期待的结果是什么?实际看到的错误信息又是什么?

期待结果:中文信息可以正常显示
错误显示:你对jack说:你好杰克
jack对你说:你��������݌z��

阅读 2.8k
推荐问题
宣传栏