ROS交流群
ROS Group
产品服务
Product Service
开源代码库
Github
官网
Official website
技术交流
Technological exchanges
激光雷达
LIDAR
ROS教程
ROS Tourials
深度学习
Deep Learning
机器视觉
Computer Vision

Linux下访问Windows文件的乱码问题



  • 乱码问题主要分为文件名的乱码问题和文件内容的乱码问题。文件内容的乱码问题比较容易解决。只要文件编辑器有选择编码的功能(比如atom),选择正确的文件编码就可以了。一般如果在linux下打开windows的文件出现乱码,把编码方式设置成GBK或者GB18030就可以了。如果在windows下打开Linux下创建的文件发现有乱码,把编码方式设置成UTF-8就可以了。下面重点说一下文件名乱码的问题。

    文件名为什么会出现乱码?

    这个要从文件系统说起。文件保存到硬盘上,不仅文件的内容要保存上去,文件的名字,创建时间等等元数据(meta data)也要保存到硬盘上。对于文件名这样的字符串数据,只要保存就会面临着编码的问题。Windows 默认的编码方式是GB18030(这个和GBK基本通用)。而Linux的默认编码方式是UTF-8。这就是乱码产生的罪魁祸首。所以其中一个系统创建的文件,在另一个系统看来就是乱码。

    如何解决乱码问题?

    解决方式很简单,只要把两个系统的编码方式改成一样的就行了。 Windows的编码方式是没办法进行修改的。但是Linux的编码方式是可以修改的。具体的设置文件就是/etc/fstab。这个文件设置硬盘分区的挂载方式,里面就包含了编码方式。对于不同格式的文件系统设置的方式也是不一样。

    对于Fat32格式的分区设置如下

    UUID=7905-27D8 /media/randoms/WORKS vfat iocharset=utf8,codepage=950,rw,user,exec,umask=000 0 0
    

    UUID后面跟的是硬盘分区的UUID,这个可以通过sudo blkid来获取。
    第二项是硬盘的挂载点。
    再后面的参数就是具体的文件系统格式
    然后就是具体的挂载选项,比如编码方式,读写方式等等。照着上面设置就没有问题了。codepage=950是GBK的编码方式,经过测试是没有问题的。

    对于nfs格式的分区就更容易了

    UUID=00045BDB000D47A2 /media/randoms/softwares ntfs rw,user,exec,umask=000 0 0
    

    格式完全是一样的,但是nfs不用设置编码方式,因为编码方式是写在硬盘上的。可以看出来nfs也更智能一些。

    解压文件还是有乱码

    如果在windows下压缩了一个zip文件,到Linux下解压会发现文件名全是乱码。这个问题产生的原因和之前的乱码问题基本一致。因为压缩的时候采用的是GB18030编码,解压的时候是UTF-8。解决起来也非常容易。

    unzip -O GBK filename
    

    加上-O参数指定文件名的编码类型就可以了。


Log in to reply