Linux 文件編碼大挪移

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

Linux 文件編碼大挪移Linux 文件編碼大挪移

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

字符編碼方案有不少種,好比 ASCII、ANCI、Unicode 等等。下面是 ASCII 編碼的一個例子。linux

字符            二進制
A               01000001
B               01000010

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

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

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

Linux 文件編碼大挪移Linux 文件編碼大挪移

在 Linux 中查看文件的編碼bash

iconv 工具的使用方法以下:工具

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

在這裏,-f或--from-code代表了輸入編碼,而-t或--to-encoding指定了輸出編碼。學習

爲了列出全部已有編碼的字符集,你可使用如下命令:編碼

$ iconv -l

Linux 文件編碼大挪移Linux 文件編碼大挪移

列出全部已有編碼字符集命令行

將文件從 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 文件編碼大挪移Linux 文件編碼大挪移

在 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_ENCODING及TO_ENCODING變量的值。別忘了改一下輸出文件的文件名"${file%.txt}.utf8.converted".

若要了解更多信息,能夠查看iconv的手冊頁。

$ man iconv

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

原文來自:https://linux.cn/article-7959-1.html

本文地址:http://www.linuxprobe.com/encoding-convert-utf8.html

相關文章
相關標籤/搜索