前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一个解决Arm Linux端U盘挂载时文件名显示乱码、Qt显示乱码的问题

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

作者头像
杨源鑫
发布2022-03-24 09:19:31
2.9K0
发布2022-03-24 09:19:31
举报
文章被收录于专栏:嵌入式开发圈嵌入式开发圈

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

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

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

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

代码语言:javascript
复制
mount /dev/sda4 /mnt/

如下图所示:

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

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

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

代码语言:javascript
复制
fdisk -l

如下图所示:

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

将以上挂载命令修改为:

代码语言:javascript
复制
mount -t vfat /dev/sda4 /mnt/

执行后可以看到:

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

代码语言:javascript
复制
mount -t vfat -o iocharset=utf8 /dev/sda4 /mnt/

执行后可以看到:

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

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

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

代码语言:javascript
复制
#include <QTextCodec>

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

代码语言:javascript
复制
/*按照自己平台支持的编解码方式设置,我的是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读取文件不能显示中文的问题成功解决!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式应用研究院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、解决嵌入式平台下挂载文件名显示乱码
  • 2、解决嵌入式Linux下Qt显示中文乱码
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档