当前位置: 首页 > 知识库问答 >
问题:

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

雍嘉勋
2023-07-23

问题描述

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

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

尝试过在发送数据的时候使用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��

共有1个答案

沈巴英
2023-07-23

你看看这张图有用吗?
image.png

来源:https://segmentfault.com/q/1010000043923867/a-1020000043923969

 类似资料:
  • 本文向大家介绍escape编码与unescape解码汉字出现乱码的解决方法,包括了escape编码与unescape解码汉字出现乱码的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天的项目中遇到需要用javascript的escape编码汉字再用unescape解码的情况,测试代码段的时候出现了乱码的情况。 具体情况如下: 首先,用EditPlus打开测试页面test.html,编辑如下ht

  • 本文向大家介绍通过网页查看JS源码中汉字显示乱码的解决方法,包括了通过网页查看JS源码中汉字显示乱码的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 在网页中读取js文件,中文显示正常(比如alert出js文件的中文信息)。但当浏览器查看js文件源代码时,则会看到代码里的中文全是乱码。虽然不影响程序运行,但是在读js文件代码时,会受影响。 前几天在浏览器查看自己写的web代码的时候,发现外

  • 本文向大家介绍C#实现的Socket服务器端、客户端代码分享,包括了C#实现的Socket服务器端、客户端代码分享的使用技巧和注意事项,需要的朋友参考一下 服务端: 客户端:

  • 本文向大家介绍JavaEE中用response向客户端输出中文数据乱码问题分析,包括了JavaEE中用response向客户端输出中文数据乱码问题分析的使用技巧和注意事项,需要的朋友参考一下   Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象。request和response对象既然代表请求和响应,那我们要获取

  • 本文向大家介绍destoon网站转移服务器后搜索汉字出现乱码的解决方法,包括了destoon网站转移服务器后搜索汉字出现乱码的解决方法的使用技巧和注意事项,需要的朋友参考一下 很多使用destoon的用户在网站转移服务器后,一切正常,但是在有搜索页面时,搜索汉字就会出现乱码 框框 之类的符号,而搜索数字,英文则很正常。 对于使用destoon(GBK)模板的用户来说,解决方法为: 将.htacce

  • 如何将两个方法合并成一个方法 如图parentValues = ['BC', 'BC-SRV', 'BC-SRV-COM'], 想得到的是选中的树组arrSelectedFacets = ['BC-SRV-COM-FTP', 'BC-SRV-COM-TEL'] 如果 BC-SRV-COM 下的子节点都选中,则arrSelectedFacets=['BC-SRV-COM']