在网上找了很多,都不靠谱,把亲测的写在这里,希望能帮助大家。注意原理就是用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;
}