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拷贝到目标平台即可

一切搞定

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用WPS打开txt文件出现乱码,我们可以尝试以下方法进行修复。首先,可以尝试使用WPS的文档修复功能来尝试恢复文档。这个功能可以帮助修复一些损坏的文档,可能会解决乱码问题。[1] 其次,如果WPS的文档修复功能无效,可以尝试使用其他文本编辑器,如记事本、Sublime Text等,来打开txt文件并查看是否还存在乱码问题。有候不同的编辑器可能会有不同的编码方式,切换编辑器可能有助于解决乱码问题。 此外,还可以检查txt文件的编码格式是否正确。如果文件的编码格式与实际内容不匹配,就会导致乱码问题。可以尝试使用UTF-8编码格式来打开txt文件,或者使用其他编码格式来查看文件内容是否正常。 如果以上方法仍然无法解决问题,可能是文件本身存在损坏或其他问题,建议尝试重新下载或获取其他可靠的文本文件副本来查看。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [wps文档乱码怎么修复呢?](https://blog.csdn.net/m0_71137483/article/details/125934674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Java避免UTF-8的csv文件打开中文出现乱码的方法](https://download.csdn.net/download/weixin_38616809/12748094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值