记录一个解决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开发板为例)

目录
相关文章
|
2月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
162 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
4月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
983 3
|
2月前
|
Linux
linux开机挂载镜像
【10月更文挑战第1天】在 Linux 系统中,开机挂载镜像通常涉及几个关键步骤,包括创建挂载点、编辑配置文件以及重新加载配置
96 0
|
4月前
|
Linux
linux 删除乱码文件名的文件
【8月更文挑战第26天】当遇到文件名显示为乱码,导致无法正常通过键盘输入文件名进行删除操作时,可以利用鼠标的复制功能配合`rm`命令实现删除。对于文件夹的删除,可使用`rm -rf 目录名`。然而,有时这种方式仍无法删除某些特殊乱码文件,这时可以通过获取文件的i节点号(使用`ls -i`或`ll -i`命令查看)并执行`find -inum [节点号] -delete`来进行删除。这种方法特别适用于处理那些因文件名问题而难以删除的情况。
183 2
|
4月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
259 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
4月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
379 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
4月前
|
算法 Linux 索引
Linux0.11 根文件系统挂载(四)
Linux0.11 根文件系统挂载(四)
37 0
|
4月前
|
存储 Linux Shell
【应用服务 App Service】App Service For Linux 中如何挂载一个共享文件夹呢? Mount Azure Storage Account File Share
【应用服务 App Service】App Service For Linux 中如何挂载一个共享文件夹呢? Mount Azure Storage Account File Share
|
4月前
|
存储 Linux 网络安全
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
|
4月前
|
Linux
在Linux中,如何挂载一个ISO文件?
在Linux中,如何挂载一个ISO文件?