记录一个解决Arm Linux端U盘挂载时文件名显示乱码、Qt显示乱码的问题

简介: 记录一个解决Arm Linux端U盘挂载时文件名显示乱码、Qt显示乱码的问题

摘要:解决嵌入式Linux平台下挂载盘文件名乱码、QT显示乱码问题。    

1、解决嵌入式平台下挂载文件名显示乱码

   我的方案开发选择采用SD卡/U盘的方式来加载3D打印模型文件,因此在PC端U盘里的文件的显示是这样的:

640.png

将U盘插入到ARM开发板端,然后直接通过mount进行挂载,执行命令如下:

mount /dev/sda4 /mnt/


如下图所示:

640.png

   我们能够看到在Window PC端的文件在ARM端下却没有办法正常显示,体现在如下几个方面:


  • 文件名显示乱码
  • 中文无法正常显示
  • 文件长度显示出错


   出现以上原因是因为没有指定文件系统的类型,我们可以通过加一个参数来指定。我们先在挂载文件之前通过以下命令查看系统硬盘情况和硬盘分区情况:

fdisk -l

如下图所示:

640.png

由此可见,我们需要将挂载的类型指定为vfat


将以上挂载命令修改为:

mount -t vfat /dev/sda4 /mnt/

执行后可以看到:

640.png

   这时候文件长度的问题解决了,但是中文却无法正常显示,出现以上原因是因为系统中没有识别到可以使用的中文字符集,这可能是因为默认使用的文件系统编码和文件系统中文件的实际编码不一致造成的。因此,我们需要在mount命令后面加一个指定字符集的参数iocharset,一般情况下,简体中文是936或者gb2312,而我的开发板文件系统时utf8。将以上挂载命令修改为:

mount -t vfat -o iocharset=utf8 /dev/sda4 /mnt/

执行后可以看到:

640.png

   此时在ARM端的显示挂载和查看已经显示正常,这是因为我已经在ARM端移植了中文字库。但是在QT端还是没办法将中文显示出来,

2、解决嵌入式Linux下Qt显示中文乱码

   出现乱码的原因是因为ARM端的QT不知道采用什么方式去解码,因此我们需要添加解码方式,头文件如下:

#include <QTextCodec>

然后,当我们需要显示文件中的字符串时,按如下方式操作:

/*按照自己平台支持的编解码方式设置,我的是utf-8*/
QTextCodec *codec = QTextCodec::codecForName("utf-8");
/*QString=>QByteArray*/
QByteArray text = data_list_result->at(tmp_for).model_name.toLatin1() ;
/*将读取到的数据以utf-8的方式进行解码*/
QString str = codec->toUnicode(text);
/*将解码的结果显示到QT控件上来*/
this->model_vector_name->at(tmp_for)->setText(str);

QT读取文件不能显示中文的问题成功解决!

往期精彩

基于瑞芯微RV1109 Linux屏幕背光调试心得


Linux下tar命令结合split实现的分包和并包


增加预编译头加快QT工程编译速度的方法


WIFI DTU产品设计与实现(基于STM32F103+QT配置上位机案例设计分享)


手把手之如何在嵌入式Linux上运行QT应用程序(以百问网imx6ull开发板为例)

目录
相关文章
|
5天前
|
Linux
Linux(1)arm64根目录扩容
Linux(1)arm64根目录扩容
18 0
|
5天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
261 0
|
5天前
|
存储 安全 数据管理
探索Linux的挂载操作🌈
在Linux这个强大的操作系统中,挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问,对于理解Linux的工作方式至关重要。那么,挂载操作究竟是什么,为什么我们需要它,如果没有它,我们将面临什么问题呢?让我们一起深入探讨。
探索Linux的挂载操作🌈
|
5天前
|
IDE Linux Shell
linux查看硬盘是否挂载--和磁盘相关命令
linux查看硬盘是否挂载--和磁盘相关命令
53 0
|
5天前
|
存储 Ubuntu Linux
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
Xenomai是一个实时性解决方案,通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分:libcobalt(用户空间实时库)、Cobalt(内核空间实时内核)和硬件架构特定层(ipipe-core或dovetail)。ipipe-core适用于Linux 5.4以下版本,而dovetail用于5.4及以上版本。本文介绍了在X86 Ubuntu环境下,如何编译Xenomai内核,搭建应用环境,包括配置、编译、安装和实时性测试。对于其他硬件架构,如ARM和ARM64,步骤类似。文章还提到了Xenomai与Linux内核版本的兼容性和实时性测试结果。
21 0
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
|
5天前
|
域名解析 Unix Linux
AIX上如何正确挂载Linux 的nfs共享目录分享篇
AIX上如何正确挂载Linux 的nfs共享目录分享篇
|
5天前
|
存储 弹性计算 Linux
【Linux】ecs 挂载分区
【Linux】ecs 挂载分区
|
5天前
|
Linux
如何将一个linux服务器挂载到另外一个linux服务器上
如何将一个linux服务器挂载到另外一个linux服务器上
23 1
|
5天前
|
人工智能 Linux
Linux 查询文件夹挂载点
Linux 查询文件夹挂载点
|
5天前
|
存储 Linux Windows
Linux挂载硬盘的详细步骤与实例
Linux挂载硬盘的详细步骤与实例
19 0

热门文章

最新文章