红联Linux门户
Linux帮助

红旗Linux6中遇到中文名乱码的解决方法

发布时间:2007-10-09 21:41:03来源:红联作者:Cromise
  作者:好难

  设想这样的场景
  1.你以前用过magic的系统,你的系统中默认编码是gb2312,你的文件名有不少是中文的。然后你跟随红旗6的脚步,升级到了最新的红旗6,默认编码是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可以处理单个文件,某个目录树以及其中的文件,甚至整个文件系统,将其中的文件名和目录名转为另一种编码。它只对文件名进行操作,而不修改文件内容。它会正确处理链接,将链接目标指向转换后的文件。如果某个目录中只有一部分文件名是utf-8,而另外一部分是传统的编码, convmv也可以处理这种情况----它会自动判断编码类型,只转换需要的那一些。

  convmv可针对档案或目录进行档案的转码,我们要知道支援那些编码呢,很简单,只要输入:

  # convnv --list

  就会显示支援的编码了,一般我们care的是cp936及utf8这两个格式。

  更改一个档名的编码(如cp936 → utf8):

  # convmv -f cp936 -t utf8 [档案名称]

  更改整个目录下的档名编码(cp936 → utf8)

  # convnv -f cp936 -t utf8 -r [目录名称]

  这个-f及-t参数,我想不难理解,就是from及to的意思,-r就是递回之意。要注意的以上的方式只是显示一个test的结果,并不会真正的进行转换工作,如要真的进行转换,需加上--notest这个参数。如:

  # convmv -f cp936 -t utf8 --notest [档案名称]
  及
  # convnv -f -f cp936 -t utf8 -r [目录名称]

  另外需注意两点:
  1.可能在转码时,convmv会认为已转过码,如在utf8 →cp936后,convmv可能认为这个档案是utf8的编码,而不进行转码工作,这时不妨再加上--nosmart这个参数来强制转换,如:

  # convmv -f cp936 -t utf8 --notest --nosmart [档案名称]

  2.最好将想转换的档案先co到一个目录下再转换,除非你看得懂或是可以输入那些奇奇怪的档案名称。例如将一个utf8转为cp936后,转换后的cp936档名可是一些乱码哦,但如想再将这个档案转为原先的utf8码时,大家看得懂或是可打出这个档名吗。
文章评论

共有 4 条评论

  1. 散人 于 2009-08-23 11:15:32发表:

    路过,学习一下

  2. 200408103 于 2009-05-30 11:17:24发表:

    要是原来没有选择语言,光配置也没用啊,不知道是不是啊

  3. bifu123 于 2008-06-05 08:07:33发表:

    # convnv --list 这一句根本就行不通,不知作者还什么必要往下写。

  4. ybhuwei 于 2007-12-18 13:47:11发表:

    谢谢楼主的帖,我正在为转换歌曲名编码的事儿犯愁呢!正好看到,谢谢.