寻找文本文件的编码

我有一堆不同编码文本文件。 但是我想把所有的转换成utf-8。 因为有大约1000个文件,我不能手动做。 我知道在llinux中有一些命令将文件的编码从一种编码转换为另一种编码。 但我的问题是如何自动检测文件的当前编码? 很明显,我正在寻找一个命令(如FindEncoding($ File))来执行此操作:

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

我通常这样做:

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

请注意,recode将覆盖文件以更改字符编码。 如果无法通过扩展名识别文本文件,则可以使用file -bi | cut -d ';' -f 1来确定它们各自的MIME类型 file -bi | cut -d ';' -f 1 file -bi | cut -d ';' -f 1

首先通过检查UFT-8来避免不必要的重新编码也是一个好主意:

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

经过这种处理后,可能还会有一些us-ascii编码的文件。 其原因是,ASCII是UTF-8的一个子集,除非引入任何不能用ASCII表示的字符,否则这些字符串仍将继续使用。 在这种情况下,编码切换到UTF-8。