在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中要实现转换首先要搞明白转换前采用的编码形式。
FROM: http://blog.csdn.net/sjturongshuxia/article/details/42002037