在Qt中,在大多数情况下都是采用unicode的形式存储的,但是QByteArray实际上是以char的形式存储的,因此转换成unicode表示的QString时需要根据编码的类型进行转换。
#include <QCoreApplication>
#include<QTextCodec>
#include<QFile>
#include<QString>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("Chinese.txt");
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
return -1;
QByteArray fileByte = file.readAll();
QTextCodec *pTextCodecGB = QTextCodec::codecForName("GB18030");
QString fileStr = pTextCodecGB->toUnicode(fileByte);
qDebug()<<"size of fileByte in GB18030:"<<fileByte.size();
qDebug()<<"fileStr:"<<fileStr;
QTextCodec *pTextCodeUTF = QTextCodec::codecForName("UTF-8");
QByteArray byteArray("你好,Qt");
QString byteStr = pTextCodeUTF->toUnicode(byteArray);
qDebug()<<"size of byteArray in UTF-8:"<<byteArray.size();
qDebug()<<"byteStr"<<byteStr;
return a.exec();
}
运行的结果是:
QTextcodec实现了对unicode的转换,可以通过指定名字来获取一个QTextcodec的实例。
可以看出在Chinese.txt文件中采用的是GB18030的编码,每个汉字需要2个字节英文字母为一个字节,包含逗号,因此为8个字节。
而在main.cpp文件中“您好,Qt”这几个字采用的是UTF-8的编码,每个汉字三个字节,因此为11个字节。
因此在Qt中要实现转换首先要搞明白转换前采用的编码形式。