Qt读取UTF8与GBK格式文件乱码问题

时间:2019-02-16
本文章向大家介绍Qt读取UTF8与GBK格式文件乱码问题,主要包括Qt读取UTF8与GBK格式文件乱码问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

window下文件一般为GBK格式文件,而Linux系统下文件一般为UTF8文件,当文件读取格式不匹配时,读取到的数据显示为乱码,所以需要转码.

GBK格式文件读取

QFile file("GBK.txt");
file.open(QFile::ReadOnly | QFile::Text);
QTextCodec *codec = QTextCodec::codecForName("GBK");
QString content = codec->toUnicode(file.readAll());
qDebug()<<"Display GBK.txt file"<<content;

UTF8格式文件读取

QFile file("UTF8.txt");
file.open(QFile::ReadOnly | QFile::Text);
QTextCodec *codec = QTextCodec::codecForName("UTF8");
QString content = codec->toUnicode(file.readAll());
qDebug()<<"Display UTF8.txt File: "<<content;

输出

Display GBK.txt file "Hello world
中文
" 
Display UTF8.txt File:  "Hello world
你好
" 

注意

  • 使用QTextCodec前需要先构造QCoreApplication类或其派生类否则转码不成功.

源文件

#include <QCoreApplication>
#include <QFile>
#include <QTextCodec>
#include <QDebug>

static void displayGBKFile()
{
    QFile file("GBK.txt");
    file.open(QFile::ReadOnly | QFile::Text);
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QString content = codec->toUnicode(file.readAll());
    qDebug()<<"Display GBK.txt file"<<content;
}

static void displayUTF8File()
{
    QFile file("UTF8.txt");
    file.open(QFile::ReadOnly | QFile::Text);
    QTextCodec *codec = QTextCodec::codecForName("UTF8");
    QString content = codec->toUnicode(file.readAll());
    qDebug()<<"Display UTF8.txt File: "<<content;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    displayGBKFile();
    displayUTF8File();

    return a.exec();
}

源码地址

https://github.com/myqtdemo/QtUTF8AndGBKCoding.git