找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

关于在Windows下使用Qt 5.x版本读取ANSI编码文件乱码问题的解决办法 ... ... ...

yafeilinux 2018-10-16 00:06 8573人围观 yafeilinux原创

版权声明

该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处!这里到这里讨论该文章。

最近一直有同学问Qt编码的问题,尤其是在Windows下显示乱码的问题。其实,如果大家搞清楚了出现乱码的原因,那么这个问题不难解决。下面就以最近一个童鞋的问题为例,再次给大家说明一下。这里没有很具体来说,后面有时间再写一篇Qt编码转换的文章。


同学的问题是:在Windows系统中使用Qt 5.11读取一个ANSI编码的文档,然后显示到界面上出现乱码。



下面是解决方式及结论:


1、打开Qt Creator新建一个Qt Widgets应用,然后通过下面的代码进行测试:

    QFile file("123.txt"); // 123.txt使用ANSI编码

    if (!file.open(QIODevice::ReadOnly)) {        return ;    }  
    QTextCodec *codec = QTextCodec::codecForName("GBK");   
    QString str = codec->toUnicode(file.readAll());       
    file.close();      
    ui->label->setText(str);

2、新建一个文本文档,输入一些中文和英文内容(比如“你好Qt”),然后另存为“123.txt”,这里可以看下,如果默认就是ANSI编码,那么保存即可,如果不是,就选择一下编码。

ANSI.jpg


注意:这里使用了相对路径,所以文本保存位置是编译运行项目生成的目录里。

位置.jpg


3、结论
搞清楚两点:
一是显示到界面上的QString使用的是Unicode字符;
二是在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;
那么问题的解决思路就是将GBK编码内容转换成Unicode字符串,这个可以借助QTextCodec来完成。


显示乱码效果:

乱码.jpg

正常显示效果:

正常显示.jpg







2人点赞鲜花

握手

雷人

2人点赞路过

鸡蛋

刚表态过的朋友 (4 人)

原作者: yafeilinux

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!


公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了