查找文本文件的编码

Hak*_*kim 2 linux bash encoding text file

我有一堆带有不同编码的文本文件.但我想把所有的转换成utf-8.因为大约有1000个文件,所以我不能手动完成.我知道llinux中有一些命令可以将文件的编码从一种编码改为另一种编码.但我的问题是如何自动检测文件的当前编码?显然,我正在寻找一个命令(比如FindEncoding($ File))来做到这一点:

foreach file
do
$encoding=FindEncoding($File);
uconv -f $encoding -t utf-8 $file;
done
Run Code Online (Sandbox Code Playgroud)

J. *_*kel 5

我通常这样做:

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

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

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

if [ ! "$encoding" = "utf-8" ]; then
    #encode
Run Code Online (Sandbox Code Playgroud)

在此处理之后,可能仍有一些带有us-ascii编码的文件.原因是ASCII是UTF-8的一个子集,它仍然在使用,除非引入了ASCII无法表达的任何字符.在这种情况下,编码切换到UTF-8.