文件名的编码转换 convmv
有时通过ssh ftp上载下载文件时,文件名会变成乱码,这就需要用convmv转换文件名。一个例子: 将”music”这个目录下的所有以 GB2312 编码的文件名的文件和子目录下的文件,转换成以 UTF-8 编码的文件名:
convmv -f gb2312 -t utf-8 --notest -r music
请注意这里的”--notest”选项:如果不提供这个选项,该命令只会做一个转换的测试,并不会真正的转换。因为这个命令有一定的”破坏性”,所 以,当你用这个程序的时候,最好是先不用”--notest”这个选项来做一遍测试,根据程序运行输出的信息来确定是否有个别的文件需要手动进行调整。
其他例子
convmv -f gbk -t utf8 --notest --nosmart *
#安装convmv
apt-get install convmv
转换内容编码用 iconv, 检测用enca
文件内容的编码检测及转换可以结合 2 个工具来完成。 convmv 的用法大致和 iconv 相似。iconv -f gbk -t utf8 input.file > output.file
一般ubuntu下用utf8, windows下用 gbk。gb2312 (国标里最小最早的一个编码标准,6763个汉字),gb18030是最新的标准,涵盖27564个汉字,向下兼容gb2312和gbk。
1.如果你不知道你所要转换的文件的编码格式,你可以通过 enca 这个工具来检测编码。举例如下:
enca foo.txt
Universal transformation format 8 bits; UTF-8
2.如果你事先已经知道了文件的编码或者通过检测知道了文件的编码,可以通过 GNU 的 iconv 来进行编码转换。以下是一个例子用来把文件的编码从 GB2312 转换成 UTF-8:
iconv -f gb2312 -t utf-8 foo.txt > foot.txt.utf-8
提醒:iconv 的输出默认是直接输出到标准输出(standard output),通常就是你的屏幕上。所以,你需要使用”>”的重定向符号来把输出转存到一个”新”的文件里面去。切不可在”>”后面使用你 的原始的输入文件名作为输出文件名,因为”>”操作,会首先将其后面的文件清空,然后再运行 “>”前面的操作。也就是说,除了原始的输入文件被清空之外,你什么也得不到。这是很多 Linux 新用户经常会犯的一个”致命”错误。特此提醒。
没有评论:
发表评论