当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [转帖]文件名编码转换:从 gb* 转向 utf8 必备工具 convmv
帖子发表于 : 2005-07-03 10:44 

注册: 2005-05-07 23:57
帖子: 3025
送出感谢: 0 次
接收感谢: 0 次
帮助文档在 http://j3e.de/linux/convmv/man/,本文是翻译

convmv - converts filenames from one encoding to another
将文件名由一种编码转换为另一种编码

命令的用法与 iconv(1)(*) 类似。

-f ENCODING
specify the current encoding of the filename(s) from which should be converted 原文件的文件名编码
-t ENCODING
specify the encoding to which the filename(s) should be converted 目标文件的文件名编码
-r
recursively go through directories 递归地处理子目录
--list
list all available encodings. To get support for more Chinese or Japanese encodings install the Perl HanExtra or JIS2K Encode packages. 列出已知的编码。要支持更多的中文或日文编码,安装 Perl-HanExtra
--nosmart
by default convmv will detect if a filename is already UTF8 encoded and will skip this file if conversion from some charset to UTF8 should be performed. --nosmart will also force conversion to UTF-8 for such files, which might result in ``double encoded UTF-8'' (see section below). 如果文件名已经是 utf-8 那么 convmv 会自动探测出来,不做处理,但是如果不想让 convmv 自动探测,就使用这个选项
--help
print a short summary of available options 输出帮助信息


设想这样的场景
1. 你以前用过 redhat 9 甚至更老的系统,你的系统中默认编码是 gb2312,你的文件名有不少是中文的。然后你跟随 fedora 的脚步,升级到了最新的 fedora core,默认编码是 utf8。你发现过去留下来那些文件的文件名都变成了乱码,或者“非法的 utf-8 序列”
2. 你全新安装了最新的 fedora core 3 系统,然后按照网上各种各样的说法,在安装 fcitx 的时候把默认编码从 utf8 改成了 gb2312 或者 gbk 甚至是 gb18030,这种改动真的是非常简单,并且在 mount 的时候要多一句 mount -o iocharset=cp936 (命令行真是长得太过分了)。然后突然有一天,你不得不换用其他语言登录系统。和上面一样,所有中文的文件名都变成了“非法的 utf-8 序列”
3. 你用着 utf-8 默认编码。然后,你开了一个 ftp,让大家上传些东西;或者你用着古老的 samba 2.x 版本。你会发现别人上传的文件名是中文的文件都变成了问号。还有,如果不是用版上那位可敬的同志修改的 gftp 下载文件,那么下载到的东西凡是中文文件名就都不可识别了,“非法的 utf-8 序列”


convmv is meant to help convert a single filename, a directory tree and the contained files or a whole filesystem into a different encoding. It just converts the filenames, not the content of the files. A special feature of convmv is that it also takes care of symlinks, also converts the symlink target pointer in case the symlink target is being converted, too.

convmv 可以处理单个文件,某个目录树以及其中的文件,甚至整个文件系统,将其中的文件名和目录名转为另一种编码。它只对文件名进行操作,而不修改文件内容。它会正确处理链接,将链接目标指向转换后的文件。如果某个目录中只有一部分文件名是 utf-8,而另外一部分是传统的编码, convmv 也可以处理这种情况——它会自动判断编码类型,只转换需要的那一些。

如果某些文件名已经是 utf-8 编码了,你却禁止 convmv 自动判断编码类型,导致这些文件名也被转换了一次,那么可以用 convmv 来将它们恢复原状,只要将 -f 和 -t 反过来用就可以了。

--qfrom 选项十分有用,它的意思是处理过程中不要输出原文件名。因为这些文件名在你当前的终端中是乱码,它会把终端搞得一团糟。

参见 locale(1) utf-8(7) charsets(7)
作者 Bjoern JACKE (Send mail to bjoern [at] j3e.de for bug reports and suggestions.)


(*)
iconv(1) 用于将一个文件的内容由一种编码转换为另一种编码,例如,假如某个文档 input.txt 是从 windows 中编辑的,是 gb2312 编码。在默认编码为 utf8 的 fc3 环境中,如果使用 gedit 打开,那么 gedit 会自动识别;但是如果使用 vi 打开,那么就会看到乱码了,这时候就应该先用 iconv 来将文件转码再打开。-f 是 from,是原文件的编码;-t 是 to,是转换目标文件的编码;-o 是输出文件名,注意千万不要输出到原文件里
代码:
iconv  -f  gb2312  -t  utf8  input.txt  -o  output.txt

这时用 vi output.txt 就可以顺利打开了


_________________
独自看一看大海
总想起身边走在路上的朋友
Lenovo E290-420[Celeron-M420/256M/60G/Intel GMA950]


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2005-07-04 16:48 
头像

注册: 2005-04-10 16:54
帖子: 2625
地址: 温州大学
送出感谢: 0 次
接收感谢: 1
赞一个!
记得以前我也为这个东东找了不少的资料!


_________________
我心无畏,源自于我心无知。
图片


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2005-07-06 16:37 
头像

注册: 2005-07-01 18:56
帖子: 887
地址: 广州市
送出感谢: 0 次
接收感谢: 3
:lol: 呵呵,记得刚开始转用zh_CN.utf8时还真的为这些转换而烦恼!!
后来配置好gvim就可以用gvim自动转换编码查看文件内容!
也算解决了这个问题!!


_________________
I will be back!


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-07-31 16:11 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
先放着


_________________
https://weakish.github.io


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译