Linux中國

如何在 Linux 中將文件編碼轉換為 UTF-8

你可能已經知道,計算機除了二進位數據,是不會理解和存儲字元、數字或者任何人類能夠理解的東西的。一個二進位位只有兩種可能的值,也就是 01。其它的任何事物,比如字元、數據和圖片,必須要以二進位的形式來表現,以供計算機處理。

簡單來說,字元編碼是一種可以指示電腦來將原始的 0 和 1 解釋成實際字元的方式,在這些字元編碼中,字元都以一串數字來表示。

字元編碼方案有很多種,比如 ASCII、ANCI、Unicode 等等。下面是 ASCII 編碼的一個例子。

字元            二進位
A               01000001
B               01000010

在 Linux 中,命令行工具 iconv 用來將使用一種編碼的文本轉化為另一種編碼。

你可以使用 file 命令,並添加 -i--mime 參數來查看一個文件的字元編碼,這個參數可以讓程序像下面的例子一樣輸出字元串的 mime (Multipurpose Internet Mail Extensions) 數據:

$ file -i Car.java
$ file -i CarDriver.java

在 Linux 中查看文件的編碼

在 Linux 中查看文件的編碼

iconv 工具的使用方法如下:

$ iconv option
$ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile 

在這裡,-f--from-code 表明了輸入編碼,而 -t--to-encoding 指定了輸出編碼。

為了列出所有已有編碼的字符集,你可以使用以下命令:

$ iconv -l 

列出所有已有編碼字符集

列出所有已有編碼字符集

將文件從 ISO-8859-1 編碼轉換為 UTF-8 編碼

下面,我們將學習如何將一種編碼方案轉換為另一種編碼方案。下面的命令將會將 ISO-8859-1 編碼轉換為 UTF-8 編碼。

考慮如下文件 input.file,其中包含這幾個字元:

� � � �

我們從查看這個文件的編碼開始,然後來查看文件內容。最後,我們可以把所有字元轉換為 UTF-8 編碼。

在運行 iconv 命令之後,我們可以像下面這樣檢查輸出文件的內容,和它使用的字元編碼。

$ file -i input.file
$ cat input.file 
$ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
$ cat out.file 
$ file -i out.file 

在 Linux 中將 ISO-8859-1 轉化為 UTF-8

在 Linux 中將 ISO-8859-1 轉化為 UTF-8

注意:如果輸出編碼後面添加了 //IGNORE 字元串,那些不能被轉換的字元將不會被轉換,並且在轉換後,程序會顯示一條錯誤信息。

好,如果字元串 //TRANSLIT 被添加到了上面例子中的輸出編碼之後 (UTF-8//TRANSLIT),待轉換的字元會盡量採用形譯原則。也就是說,如果某個字元在輸出編碼方案中不能被表示的話,它將會被替換為一個形狀比較相似的字元。

而且,如果一個字元不在輸出編碼中,而且不能被形譯,它將會在輸出文件中被一個問號標記 ? 代替。

將多個文件轉換為 UTF-8 編碼

回到我們的主題。如果你想將多個文件甚至某目錄下所有文件轉化為 UTF-8 編碼,你可以像下面一樣,編寫一個簡單的 shell 腳本,並將其命名為 encoding.sh

#!/bin/bash
### 將 values_here 替換為輸入編碼
FROM_ENCODING="value_here"
### 輸出編碼 (UTF-8)
TO_ENCODING="UTF-8"
### 轉換命令
CONVERT=" iconv  -f   $FROM_ENCODING  -t   $TO_ENCODING"
### 使用循環轉換多個文件
for  file  in  *.txt; do
$CONVERT   "$file"   -o  "${file%.txt}.utf8.converted"
done
exit 0

保存文件,然後為它添加可執行許可權。在待轉換文件 (*.txt) 所在的目錄中運行這個腳本。

$ chmod  +x  encoding.sh
$ ./encoding.sh

重要事項:你也可以使這個腳本變得更通用,比如轉換任意特定的字元編碼到另一種編碼。為了達到這個目的,你只需要改變 FROM_ENCODINGTO_ENCODING 變數的值。別忘了改一下輸出文件的文件名 "${file%.txt}.utf8.converted".

若要了解更多信息,可以查看 iconv 手冊頁 man page

$ man iconv

將這篇指南總結一下,理解字元編碼的概念、了解如何將一種編碼方案轉換為另一種,是一個電腦用戶處理文本時必須要掌握的知識,程序員更甚。

最後,你可以在下面的評論部分中與我們聯繫,提出問題或反饋。

via: http://www.tecmint.com/convert-files-to-utf-8-encoding-in-linux/

作者:Aaron Kili 譯者:StdioA 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國