qt 读取txt文本内容时,中文乱码

news2025/1/23 9:07:30

项目场景:

项目中,需要在TF卡中做类似txt阅读器的功能,因为app是在嵌入式系统下运行的,发现当读取txt的文本格式为ANSI时,中文的显示是乱码,故记录下解决方法

问题解决

中文乱码问题还是涉及到编码问题,txt的编码格式有ANSI和 utf-8等种类,那就需要读取txt文档时,按照文档的编码类型去读取。

1、获得txt文档的编码格式

Qt本身并没有直接的方法来确定文本文件的编码格式。通常,文本文件的编码格式是通过分析文件内容来确定的。有一些第三方库和工具可以帮助你检测文本文件的编码格式。

一个常用的开源库是libiconv,它提供了许多文本编码相关的功能。你可以使用libiconv来尝试不同的编码,看看哪个编码能够正确地解析文本文件。

另外,还有一些命令行工具,如enca和chardet,可以用于检测文本文件的编码格式。你可以通过在Qt中调用这些命令行工具来获取文件的编码格式。

以下是一个使用chardet命令行工具来检测文本文件编码格式的示例代码:

#include <uchardet.h>

QString detectFileEncoding(const QString& filePath)
{
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << "Failed to open file:" << file.errorString();
        return QString();
    }

    QByteArray data = file.readAll();
    uchardet_t ud = uchardet_new();
    uchardet_handle_data(ud, data.constData(), data.size());
    uchardet_data_end(ud);
    const char* encoding = uchardet_get_charset(ud);
    QString detectedEncoding = QString::fromLatin1(encoding);
    uchardet_delete(ud);

    file.close();

    return detectedEncoding;
}
void FileReader::openFile(const QString &path)
{
    QString detectedEncoding = detectFileEncoding(path);
    qWarning() << __func__ << detectedEncoding;

    m_file.setFileName(path);
    if(m_file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        m_in.setDevice(&m_file);
        m_in.setCodec(detectedEncoding.toUtf8());
    }

    m_curPos = 0;
    m_curLine = 0;
    posInfoList.append(PosInfo(m_curPos,m_curLine));
    qDebug() << __func__;
    readNextPage();
}

2、ucharDet库的集成方法

要在ARM平台上集成uchardet库,您可以按照以下步骤进行操作:

获取uchardet库源代码:您可以访问uchardet的官方网站或源代码仓库,下载最新的uchardet库源代码。

编译uchardet库:进入uchardet库的源代码目录,并执行编译命令。

从官网https://www.freedesktop.org/wiki/Software/uchardet/

下载源码https://www.freedesktop.org/software/uchardet/releases/

=================================================================================

在ARM平台上,您可能需要使用交叉编译器来构建库。以下是本项目的编译步骤:

  1. 解压后
    在这里插入图片描述
  2. mkdir build
  3. cd build
  4. cmake …/
  5. source source /opt/sl8541e_sdk_zyb/environment-setup-armv7ahf-vfp-unisoc-linux-gnueabi
  6. make

然后把生成的.h和 .so拷贝到目标平台即可

一切搞定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Steam通过短信验证来遏制带有恶意软件的更新

导语段落 近期&#xff0c;Steam平台上的游戏开发者账户遭受了来自恶意软件的更新攻击&#xff0c;为了应对这一问题&#xff0c;Valve公司宣布将实施额外的安全措施&#xff0c;其中包括基于短信的确认码验证。本文将为大家介绍这一新措施以及其对游戏开发者和玩家的影响。 短…

ORA-12541:TNS:no listener 无监听程序

问题截图 解决方法 1、删除Listener 新建一个新的 2、主机为服务器ip 3、设置数据库环境 只需要设置实例名不需要设置路径 4、服务命名 一样设置为ip 服务名与监听名一直 eg&#xff1a;orcl

React中的key有什么作用

一、是什么 首先&#xff0c;先给出react组件中进行列表渲染的一个示例&#xff1a; const data [{ id: 0, name: abc },{ id: 1, name: def },{ id: 2, name: ghi },{ id: 3, name: jkl } ];const ListItem (props) > {return <li>{props.name}</li>; };co…

Windows窗口过程

一、窗口类&#xff08;WNDCLASS&#xff09; 定义&#xff1a;窗口类是一个属性集&#xff0c;是Windows编程中用于创建窗口的模板。窗口类包含了窗口的各种信息的数据结构&#xff0c;每个窗口都具有窗口类&#xff0c;每个窗口都是基于自己的窗口类来进行创建窗口的。每一个…

【前端】Js

目 录 一.前置知识第一个程序JavaScript 的书写形式注释输入输出 二.语法概览变量的使用理解 动态类型基本数据类型 三.运算符算术运算符赋值运算符 & 复合赋值运算符自增自减运算符比较运算符逻辑运算符位运算移位运算 四.条件语句if 语句三元表达式switch 五.循环语句whi…

云技术分享 | 快速构建 CodeWhisperer 代码生成服务,让 AI 辅助编程

前言 Amazon CodeWhisperer 是 2023 年 4 月份发布的一款通用的、机器学习驱动的代码生成器服务&#xff0c;CodeWhisperer 经过数十亿行 Amazon 和公开可用代码的训练&#xff0c;可以理解用自然语言&#xff08;英语&#xff09;编写的评论&#xff0c;可在集成式开发环境 (…

Unity笔记--渲染顺序

目录 Unity中的渲染顺序一、Camera层二、透明类型&#xff08;先渲染不透明&#xff09;三、物体的SortingLayer&#xff08;越小越先渲染&#xff09;四、sorting order&#xff08;越小越先渲染&#xff09;五、RenderQueue &#xff08;越小越优先&#xff09;六、距离相机z…

在 rider 里用配置 Perforce(P4)的注意事项

整个配置界面里&#xff0c;关键就配2处位置&#xff0c;但是都有些误导性。 1是连接形参的4个参数都得填&#xff0c;字符集看你项目的要求&#xff0c;这里工作区其实指的是你的工作空间&#xff0c;还不如显示英文的 Workspace 呢&#xff0c;搞得我一开始没填&#xff0c;…

Spring事件ApplicationEvent源码浅读

文章目录 demo应用实现基于注解事件过滤异步事件监听 源码解读总结 ApplicationContext 中的事件处理是通过 ApplicationEvent 类和 ApplicationListener 接口提供的。如果将实现了 ApplicationListener 接口的 bean 部署到容器中&#xff0c;则每次将 ApplicationEvent 发布到…

windows电脑彻底删除文件怎么恢复?可尝试这2种恢复办法!

在使用windows电脑过程中&#xff0c;误删重要文件是时常发生的事情。如果幸运的话&#xff0c;误删的文件可以在回收站中还原。而有时&#xff0c;这些文件是被彻底删除的&#xff0c;并不会经过回收站。windows彻底删除文件怎么恢复&#xff1f; windows彻底删除了文件&…

第四章 Istio出口流量管理

文章目录 访问外部服务Envoy 代理将请求传递给网格外服务配置服务条目以提供对外部服务的受控访问访问外部 HTTP 服务 直接访问外部服务 出口网关清理 HTTP 网关其他 访问外部服务 为了更好的做好网络访问控制&#xff0c;k8s结合Istio出口网络升级示意图 来自 Istio 的 pod…

linux入门到精通-第四章-gcc编译器

目录 参考gcc概述gcc的工作流程 参考 gcc编译器 gcc概述 编辑器vi、记事本)是指我用它来写程序的 (编辑码)&#xff0c;而我们写的代码语句&#xff0c;电脑是不懂的&#xff0c;我们需要把它转成电脑能懂的语句&#xff0c;编译器就是这样的转化工具。就是说&#xff0c;我…

4.MidBook项目经验之MonogoDB和easyExcel导入导出

1.数据字典(固定的数据,省市级有层级关系的) //mp表如果没有这个字段,防报错,eleUI需要这个字段TableField(exist false) //父根据id得到子数据 ,从controller开始自动生成代码-->service//hasChildren怎么判断,只需要判断children的parentid的count数量>0就可以了//优化…

uniapp订单循环列表倒计时

目录 效果图片插件uni-countdown代码最后 效果图片 插件uni-countdown 地址 代码 <template><view class""><!-- 下面循环两个列表 --><view class"item" v-for"(item, index) in listData" :key"index">&…

企业c#语言源代码防泄密解决方案

在当今数字化时代&#xff0c;企业的核心业务往往依赖于软件应用程序。为了保护企业的知识产权和敏感信息&#xff0c;源代码的保密至关重要。对于制造类企业尤其是智能制造业来讲&#xff0c;最近几年是高速发展的时期&#xff0c;很多公司在做工厂流水线设备时&#xff0c;就…

远程VPN登录,IPsec,VPN,win10

windows10 完美解决L2TP无法连接问题 windows10 完美解决L2TP无法连接问题 - 哔哩哔哩

点击切换播放图片

<template><!-- banner组件 --><div class"wrap-box"><div class"image-container"><img :src"currentImage" alt"Image"></div><div class"controls"><div class"btn&q…

Deploy、Service与Ingress

Deployment 自愈 介绍:控制Pod&#xff0c;使Pod拥有多副本&#xff0c;自愈&#xff0c;扩缩容等能力 # 清除所有Pod&#xff0c;比较下面两个命令有何不同效果&#xff1f; kubectl run mynginx --imagenginxkubectl create deployment mytomcat --imagetomcat:8.5.68 # 自…

安防视频监控EasyCVR平台修改默认数据为MySQL,但忘记登录密码该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频监控平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录…

Windows设置开机自启

Windows设置开机自启 一&#xff1a;添加服务二&#xff1a;添加注册表三&#xff1a;添加本地组策略四&#xff1a;添加启动文件夹五&#xff1a;添加任务计划程序 启动优先级&#xff1a;服务>注册表>启动文件夹>任务计划 一&#xff1a;添加服务 注&#xff1a;命…