qt 展示TF卡(USB、SD)内容时,中文乱码问题

项目场景:

在一款教育硬件产品上增加了TF卡的功能,在展示文件系统内容的时候,发现无论文件夹或者文件名以及内容中包含的中文字符都是乱码


解决方法

umount -f /dev/mmcblk1p1/
mount -t vfat -o iocharset=utf8 /dev/mmcblk1p1 /mnt/media

在mount的时候指定字符集 即添加 -o iocharset=utf8来解决

原因分析:

默认使用的文件系统编码和Tf卡文件系统中文件的实际编码不一致造成的。因此,我们需要在mount命令后面加一个指定字符集的参数iocharset,一般情况下,简体中文是936或者gb2312,而我的开发板文件系统时utf8。将以上挂载命令修改为:

mount -t vfat -o iocharset=utf8 /dev/mmcblk1p1 /mnt/media

扩展

mount

root@sl8541e-smartpen32:/ # mount
/dev/root on / type ext4 (ro,relatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=456952k,nr_inodes=114238,mode=755)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=457464k,nr_inodes=114366,mode=755)
/dev/mmcblk0p41 on /mnt/userdata type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p1 on /etc/productinfo type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p41 on /mnt/data type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p41 on /home type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p41 on /var type ext4 (rw,relatime,data=ordered)
tmpfs on /var/volatile type tmpfs (rw,relatime,size=457464k,nr_inodes=114366)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
/dev/mmcblk0p40 on /mnt/userdata/aisdk type ext4 (ro,relatime,data=ordered)
/dev/mmcblk1p1 on /mnt/media type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro)
/dev/mmcblk1p1 on /mnt/media type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro)

fdisk -l

Disk /dev/mmcblk0: 7376 MB, 7734296576 bytes, 15106048 sectors
944128 cylinders, 1 heads, 16 sectors/track
Units: cylinders of 16 * 512 = 8192 bytes

Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk0p1    0,0,0       0,0,0                1   15106047   15106047 7375M ee EFI GPT
Partition 1 does not end on cylinder boundary
Disk /dev/mmcblk0boot1: 4 MB, 4194304 bytes, 8192 sectors
128 cylinders, 4 heads, 16 sectors/track
Units: cylinders of 64 * 512 = 32768 bytes

Disk /dev/mmcblk0boot1 doesn't contain a valid partition table
Disk /dev/mmcblk0boot0: 4 MB, 4194304 bytes, 8192 sectors
128 cylinders, 4 heads, 16 sectors/track
Units: cylinders of 64 * 512 = 32768 bytes

Disk /dev/mmcblk0boot0 doesn't contain a valid partition table
Disk /dev/mmcblk1: 3781 MB, 3965190144 bytes, 7744512 sectors
3292 cylinders, 49 heads, 48 sectors/track
Units: cylinders of 2352 * 512 = 1204224 bytes

Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk1p1    1,2,3       960,48,48         8192    7744511    7736320 3777M  b Win95 FAT32

在Linux下使用QML显示U盘内容时,中文乱码可能是由于文件系统编码或字符集设置不正确导致的。以下是一些可能的解决方法:

确认文件系统编码:在Linux系统中,文件系统编码可能影响到中文的显示。你可以通过以下命令查看当前文件系统编码:

file -i /etc/fstab

确保文件系统编码为UTF-8或支持中文字符集的编码。如果不是,你可能需要重新挂载U盘并指定正确的编码。

修改字符集设置:确保你的系统的字符集设置正确。你可以通过以下命令查看当前的字符集设置:

locale

如果字符集设置不正确,例如显示为UTF-8,你可以尝试修改为支持中文字符集的字符集设置。在终端中执行以下命令:

bash

export LANG="zh_CN.UTF-8"  
export LC_ALL="zh_CN.UTF-8"

这将临时修改当前终端的字符集设置为UTF-8。如果需要永久修改,请将上述命令添加到你的.bashrc或.bash_profile文件中。

你可能感兴趣的:(《Qt,项目实战经历全记录》,qt,usb,sd,tf,中文乱码)