专栏首页跟Qt君学编程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

本文分享自微信公众号 - Qt君(qtjuna),作者:Prosa

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Qt官方示例-文本查找器

    Qt君
  • QML教程-属性绑定与赋值

    Qt君
  • Qml开发中的性能Tips(翻译文)

    Qt支持任何标准图像格式,包括PNG和JPEG等位图格式,以及SVG等矢量图形格式。与位图图像相比,渲染SVG图像很慢。

    Qt君
  • 开发小程序没那么难,看完这5个套路你就全懂了

    你或许听说过,快速入门就是要学最小必要知识。而我最近在看微信小程序的官方教程时发现,这个教程虽然简单,但对于微信小程序开发来说,80%的套路都能从这里学习到,你...

    BestSDK
  • Python赶超R语言,成为数据科学、机器学习平台中最热门的语言?

    近日,kdnuggets 做了一个关于数据科学、机器学习语言使用情况的问卷调查,他们分析了 954 个回答,得出结论——Python 已经打败 R 语言,成为分...

    AI研习社
  • 野生前端的数据结构基础练习(7)——二叉树

    一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称...

    大史不说话
  • Dubbo剖析-服务提供方实现类到Invoker的转换

    前面dubbo整体架构分析里面我们讲解了服务提供者暴露一个服务的详细过程是,首先具体服务的实现类转换为了Invoker对象,然后Invoker在转换为Expor...

    加多
  • Python是构建企业项目的一个好选择吗?

    如果你看我博客很长一段时间了,你应该知道我已经做了十多年的Python,甚至写了两本关于它的书。因此,虽然我显然有偏见,在写回复之前,我还想退后一步,并向您保证...

    后场技术
  • 开发 | Python赶超R语言,成为数据科学、机器学习平台中最热门语言?

    AI科技评论消息,近日,kdnuggets做了一个关于数据科学、机器学习语言使用情况的问卷调查,他们分析了954个回答,得出结论——Python已经打败R语言,...

    AI科技评论
  • react native仿微信PopupWindow效果

    在原生APP开发中,相信很多开发者都会见到这种场景:点击右上角更多的选项,弹出一个更多界面供用户选择。这种控件在原生开发中Android可以用PopupWind...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券