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

项目场景:

项目中,需要在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.rhkb.cn/news/161641.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】Unity开发微信小游戏(一)准备和了解工作

一、所需工具 0.Unity小游戏版本 如不使用此版本&#xff0c;则无法搜索到 InstantGame package 1.Unity插件&#xff1a;InstantGame package 此插件用于处理项目中的贴图、音频、网格、动画、场景等资源文件&#xff0c;保证小程序包体不会过大。 插件可以关联UOS服务&am…

百度智能云推出,国内首个大模型全链路生态支持体系

在10月17日举行的百度世界2023上&#xff0c;百度智能云宣布&#xff0c;百度智能云千帆大模型服务平台已服务17000多家客户&#xff0c;覆盖近500个场景。 同时&#xff0c;新的企业和开发者还正在不断地涌入千帆&#xff0c;大模型调用量高速攀升。平台上既有年龄仅14岁的小…

PAM从入门到精通(五)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;四&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 五、主要函数详解 3. pam_set_item 概述&#xff1a; 设置…

【定时开关机】windows 10 如何设置定时开关机

一、需求 二、场景 三、思路 四、实现 A. 设置来电开机 B. 设置及定时关机 一、需求 需要一台 win 10 的电脑在工作时间内自动开关机&#xff08;早 8:30 - 晚&#xff1a;6:05&#xff09; 二、场景 开机&#xff1a;早 8:30 关机&#xff1a;晚 6:05 三、思路 【开机…

目标跟踪数据集分享

360VOT: A New Benchmark Dataset for Omnidirectional Visual Object Tracking 360VOT 是一个新的大规模全景追踪基准数据集&#xff0c;旨在为全景视觉物体追踪提供支持。这个数据集包含了 120 个序列&#xff0c;总计超过 11.3 万张高分辨率帧&#xff0c;采用等距投影。追踪…

new Object()到底占用几个字节

Java内存模型 对象内存中可以分为三块区域&#xff1a;对象头(Header)&#xff0c;实例数据(Instance Data)和对齐填充(Padding)&#xff0c;以64位操作系统为例(未开启指针压缩的情况)Java对象布局 如下图所示&#xff1a; 其中对象头中的Mark Word中的详细信息在文章synchr…

李宏毅生成式AI课程笔记(持续更新

01 ChatGPT在做的事情 02 预训练&#xff08;Pre-train&#xff09; ChatGPT G-Generative P-Pre-trained T-Transformer GPT3 ----> InstructGPT&#xff08;经过预训练的GPT3&#xff09; 生成式学习的两种策略 我们在使用ChatGPT的时候会注意到&#xff0c;网站上…

JVM 垃圾回收机制(可达性分析、引用计数)

目录 1 什么是垃圾2 为什么需要回收3 哪些对象被判定为垃圾呢3.1 引用计数法3.2 可达性分析算法&#xff1a;GC Roots根 1 什么是垃圾 垃圾是指在运行程序中没有任何指针指向的对象&#xff0c;就是需要被回收的。 2 为什么需要回收 执行程序会不断地分配内存空间&#xff0c…

Windows安装SNMP服务

windows10安装SNMP服务 打开计算机的设置–应用–应用和功能–可选功能–点击加号添加功能,添加以下两个功能: windows server安装SNMP服务 搜索打开服务器管理器,点击功能–添加功能,勾选SNMP服务,点击下一步,等待安装完成 按win+R快捷键,运行service.msc,在服务中将…

与 Harbor 构建高效的镜像加速工作流

镜像是容器的基础&#xff0c;如今有很多用户在实践使用 Harbor 作为镜像存储与分发方案&#xff0c;本文介绍了 Harbor 在支持镜像加速方面的能力&#xff0c;以及 Nydus 这种改进的镜像格式&#xff0c;用于解决镜像在网络&#xff0c;存储&#xff0c;端到端可信方面的问题。…

GPT绘制流程图咒语

【咒语】下面是我的一篇论文选取部分&#xff0c;为了让读者更好理解&#xff0c;我准备画一张图&#xff0c;请你阅读后为我设计一下这个图应该怎么画&#xff0c;更有说服力&#xff0c;更容易理解 论文片段&#xff1a; 多模态数据融合研究的基础在于有效的数据采集。首先&a…

git学习——第4节 时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件&#xff0c;现在&#xff0c;是时候继续工作了&#xff0c;于是&#xff0c;我们继续修改readme.txt文件&#xff0c;改成如下内容&#xff1a; Git is a distributed version control system. Git is free software. 现在&…

Spring源码解析——事务增强器

正文 上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的&#xff0c;也讲解了Spring是如何将有配置事务的类配置上事务的&#xff0c;实际上也就是用了AOP那一套&#xff0c;也讲解了Advisor&#xff0c;pointcut验证流程&#xff0c;至此&#xff0c;事务的初始化工…

CAD图形导出为XAML实践

文章目录 一、前言二、方法与实践2.1 画出原图&#xff0c;借第三方工具导出至指定格式2.2 CAD导出并转换2.3 两种方法的优劣2.3.1 直接导出代码量大2.3.2 导入导出需要调参 三、总结 一、前言 上位机通常有一个设备/场景界面&#xff0c;该界面用于清晰直观地呈现设备状态。 …

Yakit工具篇:子域名收集的配置和使用

简介(来自官方文档) 子域名收集是指通过各种技术手段&#xff0c;收集某个主域名下所有的子域名列表。子域名是指在主域名前面添加一级或多级名称的域名。例如&#xff0c;对于主域名example.com&#xff0c;其子域名可以是www.example.com、mail.example.com、blog.example.c…

触控笔哪个牌子好用?主动电容笔和被动电容笔的区别

主动式电容笔和被动式电容笔两者最大的不同之处在于主动式电容笔的应用范围更大&#xff0c;可以兼容各种不同的电容屏幕。随着人们对其认识的不断深入&#xff0c;其应用范围也在不断扩大。而且国产的主动式电容笔&#xff0c;也在不断的更新换代&#xff0c;重力越来越多&…

Django使用Token认证(simplejwt库的配置)

目录 官网文档安装项目配置拓展配置 官网文档 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ 安装 pip install djangorestframework-simplejwt项目配置 REST_FRAMEWORK {...DEFAULT_AUTHENTICATION_CLASSES: (...rest_framework_simplejwt.authent…

c#设计模式-行为型模式 之 访问者模式

&#x1f680;简介 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 访问者模式包含以下主要角色 : 抽象访问者&#xff08;Visitor&#xff09;角色&#xff1a;定义了对每一个元素 &#xff08;E…

pytorch3D Windows下安装经验总结

一、说明及准备工作 最近在安装pytorch3D的时候遇到了很多问题&#xff0c;查了很多博客&#xff0c;但发现讲的都不太全&#xff0c;所以特将自己的及收集到的安装过程经验总结如下。我是在Anaconda中虚拟环境下安装的。 1.1准备工作 官方安装教程如下&#xff1a;https://…

英特尔 SGX 技术概述

目录 介绍概述指示结构Memory安全区页面缓存Enclave Page Cache &#xff08;EPC&#xff09;安全区页面缓存映射Enclave Page Cache Map (EPCM) Memory ManagementStructures页面信息Page Information (PAGEINFO)安全信息Security Information (SECINFO)分页加密元数据Paging …