linux下編碼轉換

1.什麼是編碼? html

關於編碼的定義,咱們能夠查看百度全科http://baike.baidu.com/view/237708.htm linux

還能夠參考:http://www.cnblogs.com/cocowool/archive/2009/04/25/1443529.html 算法

2.linux下常常遇到的編碼問題 vim

若是你須要在Linux中操做windows下的文件,那麼你可能會常常遇到文件編碼轉換的問題。Windows中默認的文
件格式是GBK(gb2312),而Linux通常都是UTF-8。 windows

3.查看編碼的方法 工具

方法一:file filename 編碼

方法二:在Vim中能夠直接查看文件編碼 spa

  :set fileencoding .net

便可顯示文件編碼格式。 code

若是你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那麼你能夠在
  ~/.vimrc 文件中添加如下內容:
  set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
  這樣,就可讓vim自動識別文件編碼(能夠自動識別UTF-8或者GBK編碼的文件),其實就是依照
fileencodings提供的編碼列表嘗試,若是沒有找到合適的編碼,就用latin-1(ASCII)編碼打開。

4.文件編碼轉換

多平臺方法:
iconv        提供標準的程序和API來進行編碼轉換;
convert_encoding.py    基於Python的文本文件轉換工具;
decodeh.py    提供算法和模塊來談測字符的編碼;

Linux:
recode    轉換文件編碼;
Utrac    轉換文件編碼;
cstocs    轉換文件編碼;
convmv    轉換文件名編碼;
enca    分析給定文件的編碼;

Windows:
cscvt    字符集轉換工具;

linux下文件編碼轉換:

方法一:

在Vim中直接進行轉換文件編碼,好比將一個文件轉換成utf-8格式
  :set fileencoding=utf-8

方法二:

iconv 轉換

5.案例:

假如說咱們將windows下的一個UTF-8的文件傳到linux環境下,linux環境下的系統編碼是GB18030,咱們cat的時候就會出現亂碼,這個時候就應該想到轉碼了,下面咱們來進行試驗:

咱們將windows下一個名爲UTF-8.sh的文件傳到linux系統中,其中UTF-8.sh的內容以下:

我是中文編碼UTF-8模式~

而linux系統的系統語言設置爲:

[root@sor-sys zy]# cat /etc/sysconfig/i18n 
LANG=zh_CN.GB18030
SYSFONT="latarcyrheb-sun16"
這個時候查看一下文件的內容及編碼:

[root@sor-sys zy]# file UTF-8.sh 
UTF-8.sh: UTF-8 Unicode text, with no line terminators
[root@sor-sys zy]# cat UTF-8.sh 
鍩挎垜鏄腑鏂囩紪鐮乁TF-8妯″紡~[root@sor-sys zy]# 
[root@sor-sys zy]# 

這個時候咱們就須要轉換編碼了,記得使用iconv

[root@sor-sys zy]# iconv -f UTF-8 -t GB18030 UTF-8.sh -o GB18030.sh
[root@sor-sys zy]# cat GB18030.sh
??我是中文編碼UTF-8模式~[root@sor-sys zy]# 
[root@sor-sys zy]# file GB18030.sh 
GB18030.sh: Non-ISO extended-ASCII text, with no line terminators
[root@sor-sys zy]# 




今天在Linux 下使用 Iconv 命令轉換一個UTF8文件時,老是轉換不成功。提示:

iconv: 未知 0 處的非法輸入序列

後來使用 man iconv 查看,仍是沒發現異常,由於命令格式都是正確的。後來找了許多資料才知道緣由,以下:

a. 在作編碼轉換的時候,若是你的源格式設定爲 GB2312 的話,並且在轉換成 UTF-8 的時候,發現程序會報「illegal input sequence at position xxxx」的錯誤。這是因爲你以前的作的假定有問題。GB2312 是國標裏面一個最小也是最先的中文編碼標準。其中,只涵蓋了 6,763 個漢字。因此你須要轉換的文件的原始的格式可能並非 GB2312 編碼。這個時候,你能夠用 GB18030 作爲源格式來進行轉換。GB18030 是最新的國家標準,包含了 27,564 個漢字,並且向下兼容 GB2312 和 GBK。

b.另外,支持 Unicode 且 Free 的中文字庫我推薦使用」文泉驛「。這好像也是目前爲止,惟一的一個以支持 Unicode 爲出發點的 Free 的中文字庫。

後來我直接輸入:iconv -f utf8 -t gb18030 aaa.txt > bbb.txt   就OK了。


還有一個enconv的程序能夠用來猜想編碼


vim看文本的話就簡單多了

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,iso-8859-1,gbk set encoding=utf-8

相關文章
相關標籤/搜索