Udp显示中文的方法

来源:互联网 发布:勇者大冒险激活码淘宝 编辑:程序博客网 时间:2024/06/05 10:32
1.用QtCreator的帮助手册,问题出在udp的发送函数 在发送之前将QString转成QByteArray,

2,默认的是采用toLatin1()转换的,所以接受端无论按GB2312还是UTF-8怎么转都是乱码。而在主函数里又不能设定全局的setCodecForCStrings的编码方式。所以我最初尝试在send函数发送前,setCodecForCStrings()设成UTF-8,然后发送完后再将setCodecForCStrings()设成GB2312,发现只有第一次能发送中文,对端能正常显示。以后软键盘就乱码了。问题的根源在这里

3,默认的是Latin-1格式,也就是将codec设成0就恢复到默认状态了。用这个思路改,应该也能成功!
      其实,问题的症结在toAscii()的时候依据的编码格式,能够在toAscii()之前,将QString转成UTF-8不就好了么。
将这句话QByteArray sendByteArray  = sendStr.toAscii();改成QByteArray sendByteArray = sendStr.toUtf8().data();UDP的显示消息模块不变,依然用 
QTextCodec *tutf=QTextCodec::codecForName("UTF-8");
QString dataStr =tutf->toUnicode(data);还用UTF-8来解析,这样就能正常接收消息并显示中文了!

代码:
void UdpThread::read()
{
    QByteArray datagram;
    QString dataStr;
    QTextCodec *tutf=QTextCodec::codecForName("GB2312");
    do {
        datagram.resize(sUdpSocket->pendingDatagramSize());
        sUdpSocket->readDatagram(datagram.data(), datagram.size());

        dataStr =tutf->toUnicode(datagram);
    } while (sUdpSocket->hasPendingDatagrams());
    if(!dataStr.isEmpty())
    {
        qDebug()<<"ok";
    }
    else
    {
        qDebug()<<"datagram is empty";
    }
    qDebug()<<dataStr;
    processdata(dataStr);

}
0 0
原创粉丝点击