问题描述
私聊模块,一个客户端发送完数据,另一个客户端在显示方面出现中文乱码。
问题出现的环境背景及自己尝试过哪些方法
尝试过在发送数据的时候使用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��
你看看这张图有用吗?
来源:https://segmentfault.com/q/1010000043923867/a-1020000043923969