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

目录
相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
112 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
839 3
|
3月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
278 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
3月前
|
Linux
linux 删除乱码文件名的文件
【8月更文挑战第26天】当遇到文件名显示为乱码,导致无法正常通过键盘输入文件名进行删除操作时,可以利用鼠标的复制功能配合`rm`命令实现删除。对于文件夹的删除,可使用`rm -rf 目录名`。然而,有时这种方式仍无法删除某些特殊乱码文件,这时可以通过获取文件的i节点号(使用`ls -i`或`ll -i`命令查看)并执行`find -inum [节点号] -delete`来进行删除。这种方法特别适用于处理那些因文件名问题而难以删除的情况。
157 2
|
3月前
|
Linux
关于linux的qt发布(linuxdeployqt)中opengl版本过高的解决
关于linux的qt发布(linuxdeployqt)中opengl版本过高的解决
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
109 3
|
4月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
149 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
5月前
|
Linux
linux不同场景下修改文件名的五种方法
linux不同场景下修改文件名的五种方法
93 1
|
5月前
|
SQL Linux 数据库
Linux上sqlite的安装和使用方法以及在QT中如何使用sqlite&笔记总结
Linux上sqlite的安装和使用方法以及在QT中如何使用sqlite&笔记总结
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城