2012-10-12 80 views
2

我有一堆使用不同編碼的文本文件。但我想將所有的轉換爲utf-8。由於有大約1000個文件,我不能手動完成。我知道在llinux中有一些命令將文件的編碼從一種編碼轉換爲另一種編碼。但我的問題是如何自動檢測文件的當前編碼?顯然,我正在尋找一個命令(比如FindEncoding($文件))來做到這一點:查找文本文件的編碼

foreach file 
do 
$encoding=FindEncoding($File); 
uconv -f $encoding -t utf-8 $file; 
done 
+0

'enca'似乎是你正在尋找的工具:http://linux.die.net/man/1/enca –

+1

'uconv'應該自動檢測源代碼,也就是說你不需要' -f'國旗。 –

+0

[如何通過腳本在Unix中查找文件的編碼]可能的重複(http://stackoverflow.com/questions/805418/how-to-find-encoding-of-a-file-in-unix -via的腳本) –

回答

5

我平時某事像這樣:

for f in *.txt; do 
    encoding=$(file -i "$f" | sed "s/.*charset=\(.*\)$/\1/") 
    recode $encoding..utf-8 "$f" 
done 

注意,重新編碼將覆蓋該文件改變字符編碼。 如果無法通過擴展名識別文本文件,則可以使用file -bi | cut -d ';' -f 1確定它們各自的MIME類型。

它也可能是一個好主意,通過UFT-8第一次檢查,以避免不必要的重新編碼:

if [ ! "$encoding" = "utf-8" ]; then 
    #encode 

此處理後,仍有可能與us-ascii編碼的一些文件。其原因是ASCII是UTF-8的一個子集,除非引入任何不能用ASCII表示的字符,否則這些字符串仍將繼續使用。在這種情況下,編碼切換到UTF-8。