`
touchmm
  • 浏览: 1038343 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

跨平台中文文件名乱码的解决

阅读更多

事情的起因是这样的~~

在很久很久以前——大约是2年多年前,我整了一台P3的机器装了FreeBSD做服务器,经常用Filezilla的SFTP往里面备份本地的文件,当然也包括一些中文名的文件。一切都很正常,上传下载都没问题,即使是用 SSH连过去用Tar打包再Gzip压缩以后下载下来解开都没问题。

但是好日子在前几天到头了。我前一阵又弄了一台P3的机器装了Ubuntu。问题出现了:

首先是在Windows上用Filezilla连接Ubuntu时看到的中文文件名全是乱码,但是用Putty通过SSH连接Ubuntu却是正常 的(原先是乱码,后来改设置为UTF-8编码就好了,不过Filezilla没有类似的设置可改)。如果用Filezilla向Ubuntu上传本地的中 文文件,则在Filezilla里看到Remote端的文件名是正确的,但在Putty里看到是乱码。

然后更严重的问题是:当我在Ubuntu上用Filezilla的SFTP从FreeBSD上下载文件时发现那些中文文件名都成了乱码。只好改用 tar/tar.gz再试,结果还是乱。最后问了Google,但是结果并不理想,试过很多方法都无法解决,甚至为此特地在FreeBSD和Ubuntu 上都装了p7zip试验,也还是不行。

折腾了好几天之后,我才想到应该研究一下几个系统上的locale设置究竟是如何的——坦白说,要不是因为搜到的资料里有提到这方面,我从前还真没注意到这回事。在FreeBSD和Ubuntu上分别运行了locale命令检查的结果是:

FreeBSD的LC_ALL为“C”,即”POSIX”的别名,似乎是一种无固定编码的方案,或者可以认为就是本地编码,默认的设置。
Ubuntu的LC_ALL为“zh_CN.UTF-8”,这个是我设置的。
Windows不必说了,肯定是本地编码——只是我没有想到的是,公司里用的英文版Windows居然也是本地编码,我一直以为是Unicode的,看来是为了保持兼容。

这样就好理解了,Filezilla不改变编码方式,所以当Remote端与本机的编码不一致时,必然乱码。所以在Windows上用 Filezilla连接Ubuntu看到乱码,而我的Putty因为是设置为UTF-8编码,所以看到的是正确的——因为Ubuntu一端是UTF-8。 而如果用Filezilla上传中文文件,则因为Windows是本地编码,所以上传以后仍然为本地编码(GB系),而Ubuntu是UTF-8所以是乱 码。

FreeBSD那边的问题也是一样的,因为那些文件都是以前从Windows上传上去的,用的都是GB系编码,而早年我用Putty都是用默认的本 地编码方案,所以一直没有发现问题。这样的话,因为FreeBSD是本地编码,与Ubuntu的UTF-8不一致,所以怎么弄都是乱码。

但是据说用7zip这样的工具打包以后是可以解决这样的编码不一致问题的,我试了却没有成功。后来才想明白,因为7zip是根据系统的locale设置来对文件名进行相应的处理,因为原来我处理的时候文件名是GB系的编码,而系统是设置为UTF-8,所以总也不对。

最后的解决方案是:

在ubuntu上用以下命令:

export LC_ALL="zh_CN.GBK"
scp raptor@freebsdserver:/home/raptor/myfiles/*.* .
export LC_ALL="zh_CN.UTF-8"
convmv -f GBK -t UTF-8 --notest *.*

原理就是先把ubuntu的locale改为GBK,然后用SSH COPY文件过来,再改locale为UTF-8,然后用convmv来转换文件名的编码。

不过经过试验表明,不改变locale直接scp也是可以的,因为scp并不会改变文件名的编码方式,不过改了locale以后便于在转编码之前检查scp过来的内容(否则scp过来是乱码,要到转编码后才正常)。

这样做的结果就是,这些文件在ubuntu上是正常了,以后要再弄回windows就比较麻烦,需要用7zip之类的工具打包下载再解开。

归根到底这些问题都是因为该死的Windows用本地编码来记录文件名,Unicode化做得不够彻底。

分享到:
评论

相关推荐

    Linux下中文文件名乱码问题的详解 - CSDN博客1

    总结来说,解决Linux下中文文件名乱码问题的关键在于: 1. 确保Linux系统支持中文编码,如GBK和UTF-8。 2. 在处理文件名时进行适当的编码转换,特别是在跨平台操作时。 3. 如果在编程中处理文件名,可能需要编写或...

    java下载时文件名乱码

    在Java编程中,遇到“java下载时文件名乱码”的问题通常是由于编码不一致或处理不当造成的。在处理文件下载时,尤其是从Web服务器下载带有...通过上述方法,可以有效地避免乱码问题,实现跨平台、跨浏览器的文件下载。

    SharpCompress 解压缩zip,rar文件,解决中文乱码

    本文将深入探讨如何使用SharpCompress这一开源库来处理ZIP和RAR文件,并解决在处理中文文件名时可能出现的乱码问题。 SharpCompress是一款强大的、跨平台的压缩库,支持多种压缩格式,包括ZIP、TAR、GZIP、BZIP2、7...

    CentOS 下中文文件名显示乱码问题

    总之,解决CentOS下中文文件名显示乱码问题的关键在于理解和应用正确的编码转换工具和方法。通过`convmv`等工具,可以有效地将GBK编码的文件名转换为UTF-8,从而在Linux环境中正确显示中文文件名。在日常工作中,...

    Server-U出现乱码的解决方法

    "Server-U出现乱码的解决方法"这个标题所指的问题,就是当使用Server-U这款流行的FTP(文件传输协议)服务器软件时,遇到了中文文件名或目录名显示为乱码的状况。Server-U是一款功能强大的FTP服务器程序,它允许系统...

    【文件下载】及解决文件名中文乱码问题

    总的来说,解决中文文件名乱码问题需要从多个角度考虑,包括服务器配置、HTTP头部设置、编码转换以及选择合适的工具。了解并掌握这些知识点,有助于我们在实际工作中更顺畅地处理各种语言环境下的文件下载问题。对于...

    WebZip乱码目录文件名修改

    同时,这也提醒我们在进行跨平台或跨编码环境的工作时,一定要注意字符编码的一致性和兼容性,避免因为编码问题导致的数据丢失或显示错误。 总结来说,"Webzip乱码目录文件名修改"是一个关于编码转换和文件操作的...

    批量修改中文文件名编码程序

    总之,批量修改中文文件名编码程序是解决跨平台中文乱码问题的有效工具,它通过自动化和智能化的方式,简化了处理过程,使得普通用户也能轻松应对这一技术问题。id3kill.exe作为其中的一个实例,可能是音乐爱好者和...

    ZipUtil文件压缩工具类(解决中文乱码)

    为了确保兼容性和跨平台性,使用UTF-8编码是明智的选择,因为它是现代系统广泛支持的标准编码。此外,`ZipUtil`类可能还包含其他实用功能,比如解压缩ZIP文件,检查ZIP文件是否存在中文乱码,或者提供配置选项以...

    ubuntu rsync中文乱码 window ubuntu rsync同步中文乱码.docx

    在跨平台文件同步的过程中,尤其是涉及到Windows和Linux之间的数据迁移,常常会遇到中文文件名乱码的问题。这是因为Windows操作系统默认采用GBK编码,而大多数Linux发行版(如Ubuntu)使用UTF-8编码,这两种编码方式...

    ZipInputStream解压有中文名报错问题解决

    2. **使用第三方库**:例如Apache Commons Compress或Google的Guava库,这些库通常已经处理了跨平台和多语言文件名的问题。 3. **设置正确的字符编码**:在解压过程中,可以使用`ZipFile`类,通过构造函数传入一个`...

    解决文件名解压后乱码的问题 将文件名进行转码的代码

    文件名乱码问题的解决方案通常涉及编码转换。在PHP中,我们可以使用`iconv`函数来完成这个任务。`iconv`函数允许我们从一种字符编码转换到另一种。在上述代码中,它被用来将从GBK编码转换为UTF-8编码,以适应Linux...

    java android zip解压缩(解决压缩中文乱码问题)

    在Android开发中,处理压缩文件是一项常见的任务,尤其...这是一个轻量级且高效的方法,对于处理跨平台的压缩文件问题尤其有用。在实际开发中,我们应该始终关注字符编码问题,确保在各种环境下数据的正确性和一致性。

    SVN乱码解决文档说明方案_TortoiseSVN_

    在使用Subversion(SVN)进行版本控制时,有时可能会遇到文件名或文件内容出现乱码的情况,尤其是在跨平台操作或者编码不一致的环境中。TortoiseSVN是一款流行的Windows Shell界面下的SVN客户端,它提供了图形化的...

    java压缩zip文件解决中文乱码问题

    在Java中,`java.util.zip`包提供了对ZIP文件的基本操作,但默认使用的是平台默认的字符集,这可能在跨平台操作时引发乱码问题。 为了解决这个中文乱码问题,我们需要在创建ZipEntry时指定合适的字符集,通常是UTF-...

    解压文件时中文乱码

    - **重命名文件**:如果只是个别文件名乱码,可以尝试先在压缩包内重命名文件,使用英文或无争议的字符,再进行解压。 - **使用支持Unicode的压缩工具**:例如7-Zip,它在创建和解压ZIP文件时,默认使用UTF-8编码...

    下载文件提示框中文乱码

    4. 文件名编码转换:对于文件名乱码,可以使用专门的工具进行转换,如“File Renamer”或“Advanced Renamer”,这些工具能帮助批量转换文件名的编码。 5. 操作系统设置:在Windows系统中,可以通过修改注册表或者...

    数据导出EXCEL 解决中文名乱码 同时赠由二进制转换成文件(解决中文名乱码)

    在IT领域,尤其是在数据分析、数据处理的过程中,经常需要将数据导出为Excel格式进行进一步的分析或分享...在实际操作中,了解并掌握这些技巧将有助于确保数据的完整性和可读性,特别是在跨平台或跨系统的数据交流中。

    php中文乱码解决办法

    PHP中文乱码问题一直是开发者们面临的一大挑战,尤其是在进行跨平台、多编码环境下的Web开发时。以下是一些关于如何解决PHP中文乱码问题的详细方法: 首先,我们需要理解编码的基本概念。编码决定了字符集的表示...

    zip解压缩乱码的解决方案

    - 尽量避免在文件名中使用非ASCII字符,以减少跨平台或跨工具时可能出现的乱码问题。 7. **了解操作系统差异** - 不同操作系统对编码的支持也有所不同,Windows系统通常使用GBK或ANSI,而Linux和macOS则更多地...

Global site tag (gtag.js) - Google Analytics