linux 文件編碼格式轉換

http://hi.baidu.com/skyyjl/item/50a50dcd62d94edbee183baf


如果你需要在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
比如將一個GBK編碼的文件轉換成UTF-8 編碼
iconv -f GBK  -t  UTF-8 file1 -o file2



Linux對一個3G的文本進行編碼轉換全過程


本過程中涉及到的Linux的命令有:split, iconv, cat問題:有一個3G的文本a.txt,編碼格式爲gbk,現在需要對其進行轉換成爲utf-8。難點:iconv的轉換是在內存中進行的,因此3G大小的文本,無法進行直接轉換。思路:先利用split進行文件切分,然後對每一個字文件進行ivonv轉換,最後進行cat合併。1) ll -h a.txt 查看文件的大小,2.9G2) wc -l a.txt 查看文件的行數,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 -c5) 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; done2.將*.java.new文件的.new擴展名去除find . -name "*.new" | sed 's/\(.*\).new$/mv "&" "\1"/' | sh
三、linux下有許多方便的小工具來轉換編碼,

文本內容轉換   iconv
文件名轉換     convmv
mp3標籤轉換    python-mutagen
四、用法: 

iconv [選項...] [文件...]
轉換給定文件的編碼。
輸入/輸出格式規範:
-f, --from-code=名稱      原始文本編碼
-t, --to-code=名稱         輸出編碼
信息:
-l, --list                     列舉所有已知的字符集
輸出控制:
-c                             從輸出中忽略無效的字符
-o, --output=FILE    輸出文件
-s, --silent               關閉警告
--verbose            打印進度信息
-?, --help                 給出該系統求助列表
--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將字符編碼統一成了UTF8,原來在gb18030下建立的ext3分區中的文件和目錄,一掛載到FC上就顯示成亂碼。google遍整個互聯網,說對於目錄名和文件名,有一個叫convmv的軟件可以對其進行自動轉換。
今日下載了convmv,摸索了一套使用方法如下:
convmv -f code1 -t code2 -r

code1:分區原來使用的字符集編碼。支持gb2312、gbk、big5,不支持gb18030和big5-hkscs。

code2:預轉換到的字符集編碼。對於FC,這裏填寫utf8
-r 參數:轉換子目錄。
dir:要轉換的目錄,當前目錄用./表示。
回車執行,這個時候convmv會顯示執行的結果,但不會真正對文件進行修改。並提示使用--replace參數進行修改。
七、批量轉換文件的編碼

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 ‘{}‘ \;



http://www.2cto.com/os/201210/162788.html

利用vim進行文件編碼批量轉換

 
 經常把代碼在 windows 下和 linux 下傳來傳去,苦於程序源代碼文件的編碼問題,windows 下是 cp936 格式,linux 下通用 utf-8 格式,發佈源代碼的時候也需要兩種編碼各一份,逐個文件的進行編碼轉換實在是一份讓人痛苦不堪的活,好在 vim 有批量編輯文件的功能,這要用到 args 和 argdo 命令,可以查看 :help args 與 :help argdo 以獲得詳細的說明。
 
這裏只說下這兩個命令在對文件進行批量轉換編碼的用法:
 
一、設置文件集合,
即要對哪些文件進行操作,可以使用通配符,比如我通常是對 C/C++ 源程序進行編碼轉換:  
 
:args *.h *.cpp
 
二、給出要在每個文件上執行的命令,這裏是轉換編碼:
 
:argdo set fenc=utf-8 | update
 
這樣就 ok 了,一邊偷着樂去吧。這裏要注意的是如果要同時執行多個命令則需要用 “|” 隔開,上面的 update 一定要寫上,因爲 vim 在一個文件被修改後尚未保存的情況下去編輯下一個文件會給出出錯提示的,用上這個 update 就是更新文件了,這樣就不會出這個問題了。
 
  當然,args 和 argdo 能做的事情多的很,比如可以在多個文件中批量替換,這個應該也很實用吧,具體可以查看 vim 的幫助文件  :help args  和 :help argdo.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章