1. 程式人生 > >Linux下如何修改txt檔案的字元編碼

Linux下如何修改txt檔案的字元編碼

問題:在我的 Linux 系統中有一個編碼為 iso-8859-1 的字幕檔案,其中部分字元無法正常顯示,我想把文字改為 utf8 編碼。在 Linux 中, 有沒有一個好的工具來轉換文字檔案的字元編碼?

正如我們所知道的那樣,電腦只能夠處理低階的二進位制值,並不能直接處理字元。當一個文字檔案被儲存時,檔案中的每一個字元都被對映成二進位制值,實際儲存在硬碟中的正是這些“二進位制值”。之後當程式開啟文字檔案時,所有二進位制值都被讀入並映射回原始的可讀字元。只有當所有需要訪問這個檔案的程式都能夠“理解”它的編碼,即二進位制值到字元的對映時,這個“儲存和開啟”的過程才能很好地完成,這也確保了可理解資料的往返過程。

如果不同的程式使用不同的編碼來處理同一個檔案,原始檔中的特殊字元就無法正常顯示。這裡的特殊字元指的是非英文字母的字元,例如帶重音的字元(比如 ñ,á,ü)。

然後問題就來了: 1)我們如何確定一個確定的文字檔案使用的是什麼字元編碼? 2)我們如何把檔案轉換成已選擇的字元編碼?

步驟一

為了確定檔案的字元編碼,我們使用一個名為 “file” 的命令列工具。因為 file 命令是一個標準的 UNIX 程式,所以我們可以在所有現代的 Linux 發行版中找到它。

執行下面的命令:

$ file --mime-encoding filename 

步驟二

下一步是檢視你的 Linux 系統所支援的檔案編碼種類。為此,我們使用名為 iconv 的工具及 “-l” 選項(L 的小寫)來列出所有當前支援的編碼。

$ iconv -l 

iconv 工具是 GNU libc 庫組成部分,因此它在所有 Linux 發行版中都是開箱即用的。

步驟三

在我們在我們的 Linux 系統所支援的編碼裡面選定了目標編碼之後,執行下面的命令來完成編碼轉換:

$ iconv -f old_encoding -t new_encoding filename

例如,把 iso-8859-1 編碼轉換為 utf-8 編碼:

$ iconv -f iso-8859-1 -t utf-8 input.txt 

瞭解了我們演示的如何使用這些工具之後,你可以像下面這樣修復一個受損的字幕檔案: