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


    项目场景:

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


    解决方法

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

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

    原因分析:

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

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

    扩展

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

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

    file -i /etc/fstab
    
    • 1

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

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

    locale
    
    • 1

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

    bash

    export LANG="zh_CN.UTF-8"  
    export LC_ALL="zh_CN.UTF-8"
    
    • 1
    • 2

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

  • 相关阅读:
    基于PHP+MySQL的电子邮件管理系统
    第二证券|六大券商热议“第三支箭”:再融资重启修复市场预期
    Maven——概念、IDEA集成、Maven坐标、依赖配置、依赖传递、排除依赖、依赖范围、生命周期
    List知识总结
    封装一个中间大两头小的轮播图(vue-awesome-swiper、vue2)
    C语言特殊函数
    【在线机器学习】River对流数据进行机器学习
    [ai笔记12] chatGPT技术体系梳理+本质探寻
    从实际出发⭐《G1、JDK17、Flux性能调优》⭐
    Springboot拦截器中注入Bean
  • 原文地址:https://blog.csdn.net/u011942101/article/details/133746149