#include <QString>
#include <QFile>
#include <QTextStream>
#include <QCoreApplication>
#include <QTextCodec>
#include <QDir>
#include <iostream>
using namespace std;
#include <stdio.h>
#include <string>
void printHex(char *c)
{
for (int i = 1; i <= strlen(c); i++)
printf("0x%02X ", c[i-1]);
printf("\n");
}
QString gbkToUtf8(const QString &gbkStr)
{
QTextCodec *gbk = QTextCodec::codecForName("GB18030");
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
QString ret = gbk->toUnicode(gbk->fromUnicode(gbkStr)); // gbk to utf8
return ret;
}
int main(int argc, char** argv)
{
char* a = "国";
printHex(a);
QString qa = QString::fromLocal8Bit("11111国");//国的gbk编码是B9FA,utf-8编码是 E59BBD
printHex(qa.toLocal8Bit().data());
printHex(qa.toUtf8().data());
QString ufta = gbkToUtf8(qa);
printHex(ufta.toUtf8().data());
QFile file("D:/test.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return -1;
QTextStream out(&file);
out.setCodec("UTF-8");
out << ufta;
out.flush();
file.close();
return 0;
}
效果:
vs2017+qt5.12.7