|
2009-09-12 00:28 如果你需要在Linux中操作windows下的文件,那么你可能會經常遇到文件編碼轉換的問題。Windows中默認的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介紹一下,在Linux中如何查看文件的編碼及如何進行對文件進行編碼轉換。 查看文件編碼 在Linux中查看文件編碼可以通過以下幾種方式: 1.在Vim中可以直接查看文件編碼 :set fileencoding 即可顯示文件編碼格式。 如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那么你可以在 ~/.vimrc 文件中添加以下內容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 這樣,就可以讓vim自動識別文件編碼(可以自動識別UTF-8或者GBK編碼的文件),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼打開。 文件編碼轉換 1.在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式 :set fileencoding=utf-8 2. iconv 轉換,iconv的命令格式如下: iconv -f encoding -t encoding inputfile 比如將一個UTF-8 編碼的文件轉換成GBK編碼 iconv -f GBK -t UTF-8 file1 -o file2 Linux對一個3G的文本進行編碼轉換全過程 本過程中涉及到的Linux的命令有:split, iconv, cat 問題:有一個3G的文本a.txt,編碼格式為gbk,現(xiàn)在需要對其進行轉換成為utf-8。 難點:iconv的轉換是在內存中進行的,因此3G大小的文本,無法進行直接轉換。 思路:先利用split進行文件切分,然后對每一個字文件進行ivonv轉換,最后進行cat合并。 1) ll -h a.txt 查看文件的大小,2.9G 2) wc -l a.txt 查看文件的行數(shù),9千200萬行 3) split -l 20000000 a.txt chunk 按照每個文件2千萬行進行切割,共分成5個文件 4) 進行轉換 iconv -f gbk -t utf-8 chunka > chunka_utf8 -c iconv -f gbk -t utf-8 chunkb > chunkb_utf8 -c iconv -f gbk -t utf-8 chunkc > chunkc_utf8 -c iconv -f gbk -t utf-8 chunkd > chunkd_utf8 -c iconv -f gbk -t utf-8 chunke > chunke_utf8 -c 5) rm chunka chunkb chunkc chunkd chunke 刪除原文件 6) cat chunk* > a.txt_utf8 進行合并 至此,工作完成 二、 批量文件編碼轉換 本操作有風險,請注意操作前備份文件。 1.將原來所有編碼為gb2312的*.java文件轉換為編碼為utf-8的*.java.new文件 for i in `find . -name "*.java"`; do iconv -f gb2312 -t utf-8 $i -o $i.new; done 2.將*.java.new文件的.new擴展名去除 find . -name "*.new" | sed 's/\(.*\).new$/mv "&" "\1"/' | sh 三、 linux下有許多方便的小工具來轉換編碼, 文本內容轉換 iconv 文件名轉換 convmv mp3標簽轉換 python-mutagen 四、 用法: iconv [選項...] [文件...] 轉換給定文件的編碼。 輸入/輸出格式規(guī)范: -f, --from-co -t, --to-co 信息: -l, --list 列舉所有已知的字符集 輸出控制: -c 從輸出中忽略無效的字符 -o, --output=FILE 輸出文件 -s, --silent 關閉警告 --verbose 打印進度信息 -?, --help 給出該系統(tǒng)求助列表 --usage 給出簡要的用法信息 -V, --version 打印程序版本號 五、 find default -type d -exec mkdir -p utf/{} \; find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \; 這兩行命令將default目錄下的文件由GBK編碼轉換為UTF-8編碼,目錄結構不變,轉碼后的文件保存在utf/default目錄下。 六、 Linux下文件名編碼批量轉換convmv 由于FC將字符編碼統(tǒng)一成了UTF8,原來在gb18030下建立的ext3分區(qū)中的文件和目錄,一掛載到FC上就顯示成亂碼。google遍整個互聯(lián)網,說對于目錄名和文件名,有一個叫convmv的軟件可以對其進行自動轉換。 今日下載了convmv,摸索了一套使用方法如下: convmv -f co co co -r 參數(shù):轉換子目錄。 dir:要轉換的目錄,當前目錄用./表示。 回車執(zhí)行,這個時候convmv會顯示執(zhí)行的結果,但不會真正對文件進行修改。并提示使用--replace參數(shù)進行修改。 七、 批量轉換文件的編碼 for i in `find ./ -name *.htm` ; do echo $i;iconv -f gb18030 -t utf8 $i -o /tmp/iconv.tmp;mv /tmp/iconv.tmp $i; done find -name “*.htm“ \ -exec iconv -f gb2312 -t utf8 ‘{}‘ -o /tmp/iconv.tmp \; \ -exec mv /tmp/iconv.tmp ‘{}‘ \; |
|
|