• 953阅读
  • 4回复

qt5.14.2 编译结果显示中文的问题 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2022-01-16
好容易把程序调通了,但是问题又又又来了,其他特殊符号没问题,中文单个也没问题,就是多打几个中文汉字就不行了, 网上找的那些方法都不适用,期待高手帮忙。
void MsgThread::run()
{
    char buf[1024] = {0};  
    while(true){      
if(mIsSend){        
   qDebug() << "msg:"<< mMsg;          
  //发送          
  :::send(mSocket,mMsg.toUtf8().data(),mMsg.length() +1,0);      
    int errorCode = WSAGetLastError();      
     //连接超时          
  if( errorCode == WSAECONNABORTED)  {      
          emit isClose();            
         return;          
}          
//等待服务端回应          
  int ret = ::recv(mSocket,buf,1024,0);          
  //服务端关闭        
   if( ret == 0)
{              
emit isClose();      
          return;        
    }        
       QTime time = QTime::currentTime();  
        QString str = time.toString("hh:mm:ss");    
           
        QString msg = QString("%1 收到消息 %2").arg(str).arg(buf);     编译结果就是打了5个汉字,只能显示2个,我怀疑buf这里有问题
        emit isMsg(msg);                                                                            希望请高手们指点一二!
       mIsSend = false;
     }
   }
}
努力了这么久,但凡有点天赋,也该有些成功迹象了.

只看该作者 1楼 发表于: 2022-01-16
不知道咱们这里能不能上传图片?
努力了这么久,但凡有点天赋,也该有些成功迹象了.
离线clickto

只看该作者 2楼 发表于: 2022-01-16
:::send(mSocket,mMsg.toUtf8().data(),mMsg.length() +1,0);      
这里发送的长度不对
你最终转为char型了,但是你发送的是mMsg的长度,这两个是不一样的
比如说,你的汉字是5个,但是编码后,3个子节标识一个汉字,你这里能发送的汉字长度就是(5+1)/3 =2个。
离线spygg

只看该作者 3楼 发表于: 2022-01-16
用QByteArray, QString 和char* 可能会遇到字符串中出现0而截断的问题
签名就是这么浪
离线fsu0413

只看该作者 4楼 发表于: 2022-01-17

  :::send(mSocket,mMsg.toUtf8().data(),mMsg.length() +1,0)

第3个参数 用.toUtf8().size()
快速回复
限100 字节
 
上一个 下一个