解决了QT网络编程中的中文乱码问题

本人原创

这里侧重的是文本乱码解决,适用于本地或者网络文本等字符传输的乱码解决,

对于标题栏的中文乱码解决方案,网上一搜一大堆,同一内容被N多人转载,遇到标题栏的乱码,请自己搜索,仿照解决

 

 

QString name = ui->le_name->text().toLocal8Bit();

QString message = ui->lineEdit->text().toLocal8Bit();
QDateTime dt;
QTime time;
QDate date;
dt.setTime(time.currentTime());
dt.setDate(date.currentDate());
QString dati = dt.toString("yyyy-MM-dd hh:mm:ss");
QString msg = dati+"/n"+name+":"+message;
        emit sendmsg(msg);
此段是从界面文本输入框中获取输入,但是需要转换字符格式来进行发送。。。。。。重点在 toLocal8Bit();
//设置字号
    QFont ft;
    ft.setPointSize(12);
    ui->tb_show->setFont(ft);
    //设置颜色
    QPalette pa;
    pa.setColor(QPalette::Text,Qt::darkGreen);
    ui->tb_show->setPalette(pa);
    QByteArray qb = msg.toLatin1();
    const char *mm =  qb.data();
    ui->tb_show->append(QString::fromLocal8Bit(mm,-1));
此段是收到消息端的界面上需要显示,若不处理,则显示的是乱码,先将收到的msg转换,msg.toLatin1(),然后进行传值给
const char *,显示的时候,QString::fromLocal8Bit(const char *str,int size = -1),所以这里建立const char *mm,
将mm传递进去即可
qs = ui->tb_show->toPlainText();
    QString input;
    input = qs+"/n";
    ui->tb_show->clear();
    if(qs == NULL)
    {
        return;
    }
    else
    {
        file.open(QIODevice::Append);
        file.write(input.toLocal8Bit());//保存界面上显示的内容,需要转换编码格式
        file.close();
    }

 

 

特别声明:

由于本人一开始尝试如下代码失误,误认为是不可以的,特自己想出来上面的解决办法,

下面列出网络上最常用的乱码解决方案:

 

#include <QTextcodec> //这个不能少

 

int main(int argc, char *argv[])

{
    QApplication a(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));// 2
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));// 3 如上三句是关键语句
    Widget w;
    w.setWindowTitle("tcpClient");
    w.show();
    return a.exec();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值