我有一堆不同编码的文本文件。 但是我想把所有的转换成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。