Udp显示中文的方法

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

}
QT是一种跨平台的应用程序开发框架,它为开发人员提供了丰富的工具和库,用于开发各种类型的应用程序,包括使用UDP传输汉字的应用。 使用QT的UDP套接字类,我们可以轻松地在客户端和服务器之间传输汉字。在客户端,我们可以使用QUdpSocket类创建一个UDP套接字,并设置目标服务器的IP地址和端口。然后,我们可以使用套接字的writeDatagram函数将要传输的汉字数据发送给服务器。 在服务器端,我们同样可以使用QUdpSocket类创建一个UDP套接字,并使用bind函数将其绑定到指定的IP地址和端口。然后,我们可以使用套接字的readyRead信号连接槽函数,在该函数中读取接收到的数据,并将其转换为汉字。 当客户端发送汉字数据时,服务器就会触发readyRead信号,表示接收到了数据。在槽函数中,我们可以使用套接字的readDatagram函数获取接收到的数据包,并将其转换为汉字。然后,我们可以对接收到的汉字进行处理,例如显示在GUI界面上或进行其他操作。 需要注意的是,为了正确传输汉字,我们需要在发送和接收数据时对其进行编码和解码。QT提供了QString和QByteArray类来处理编码和解码操作,我们可以使用toUtf8和fromUtf8函数将汉字转换为字节流,并在接收数据时使用fromUtf8函数将字节流转换为汉字。 总之,使用QT的UDP套接字类,我们可以方便地传输汉字数据。通过编写适当的发送和接收代码,我们可以在QT应用程序中实现可靠的汉字传输功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聊聊技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值