LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1358|回复: 7

有没有方法能“查找使用GBK编码的文件名”并且"将文件名转换为UTF-8编码&a

[复制链接]
发表于 2010-10-3 17:01:43 | 显示全部楼层 |阅读模式
我在实验室里面搭了一个FTP服务器,使用的是Gentoo+vsftpd。Gentoo上的locale是UTF-8。

由于FTP用户使用的操作系统(Windows/Linux)、客户端、客户端编码设置(Auto/UTF-8/GBK)不同,导致上传的部分文件名使用了GBK/GB2312编码。这些文件名在Linux终端下显示为乱码,在使用UTF-8编码的FTP客户端中显示为乱码,仅在使用GBK编码的FTP客户端和网页浏览器中才正确显示。

现在,我要求组内使用FTP的同事把FTP客户端编码设为UTF-8。这样,无论从哪个平台上传、下载都能保证文件名显示正常,在Linux终端中文件名的显示也是正常的。另外,Windows资源管理器对UTF-8上传/下载文件也支持得很好。

这个做法算是解决了“新上传”文件的文件编码问题,但仍然需要解决遗留的GBK编码文件名。有没有办法,在一堆混杂使用GBK和UTF-8文件名编码的文件中,找到使用GBK进行编码的文件或文件夹?这样,就可以批量进行文件名编码转换了。

谢谢各位!
发表于 2010-10-3 17:45:42 | 显示全部楼层
emerge enca

enconv -L zh -x utf8 FILE
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-4 22:26:47 | 显示全部楼层
谢谢 MaskRay 的回复。enca是转文本文件内容编码的,convmv可以转文件名编码。后来在convmv的“半自动”提示下,花了一些时间把FTP上的文件名编码都该过来了。

"模拟转换" -- 查看将做什么样的转换
convmv -r -f cp936 -t utf8 --nosmart *

“实际操作”
convmv -r -f cp936 -t utf8 --nosmart --notest *
回复 支持 反对

使用道具 举报

发表于 2010-10-5 08:34:23 | 显示全部楼层
建议客户端在win上用 filezilla  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-5 12:19:07 | 显示全部楼层
我还专门做了个测试,看看不同操作系统(Linux/Windows)、不同FTP客户端(FlashFXP/Filezilla/Windows资源管理器)、不同编码方式(自动编码/UTF-8/ANSI-GB*)下上传文件以后的文件编码情况。得到的结论是:

如果FTP Server 端的Locale是UTF-8,那么大家在使用FTP客户端上传/下载时把编码强制设为UTF-8就OK了。Windows资源管理器访问FTP站点时没有“设定编码”这一选项,但在这种情况下也工作得很好。
回复 支持 反对

使用道具 举报

发表于 2010-10-8 13:54:23 | 显示全部楼层
楼主在日本么?新干线?

python有个工具可以检测编码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-8 14:43:37 | 显示全部楼层
误会了,偶在大陆,这个ID用着习惯了。

谢谢zhllg的提示,Google 了一下,那个自动编码检测的Python库是不是叫"chardet",参考了:

http://www.sanfanling.cn/read.php?216
http://chardet.feedparser.org/

Python现在是哪里都有它的份啊。
回复 支持 反对

使用道具 举报

发表于 2010-10-8 15:44:42 | 显示全部楼层
是chardet
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表