qt 中base64编码的gb2312转为utf8显示,乱码处理。其他编码通用...

在网上找了很多,都不靠谱,把亲测的写在这里,希望能帮助大家。注意原理就是用unicode编码当媒介。
注意:qt的控制台默认显示的都是系统字符,我的是utf8,这个跟java不一样。所以必须都要转成utf8才能显示正常。

base64编码的原文:
发件人: xxxx发送时间: 2017-12-08 14:19收件人: xxxx主题: test

代码如下:

#include <iostream>
#include <QTextCodec>

using namespace std;

int main(int argc, char *argv[])
{
	//base64编码
	QByteArray abc = QByteArray::fromBase64("t6K8/sjLo7ogeHh4eLeiy83Ksbzko7ogMjAxNy0xMi0wOCAxNDoxOcrVvP7Iy6O6IHh4eHjW98zio7ogdGVzdA==");
    //qt自带的utf8编解码器
    QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8");
    //qt自带的gb2312编解码器
    QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312");
    //将gb2312的base64编码转成unicode编码,也就是统一编码
    QString strUnicode= gb2312Codec->toUnicode(abc);
    //把统一编码转为utf8编码,统一编码在此做了中间媒介的作用。
    QByteArray ByteUtf8= utf8Codec->fromUnicode(strUnicode);
    //QByteArray转为QString
    QString result = QString(ByteUtf8);
    cout << result.toStdString() << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值