为目录中的所有文件获取一致的编码

为目录中的所有文件获取一致的编码

我有一个目录,其中包含来自不同供应商的大量 csv 文件,具有两种不同的编码:

  • ASCII 文本/UTF-8
  • UCS2 / UTF-16 小端

我想使用传统语法对这些数据文件使用 grep、awk、sed 和其他实用程序。

将这些文件从 UTF-16 重新编码为 UTF-8 不会丢失任何有用的数据。所有 csv 文件仅包含 ASCII 数据,因此我无法理解为什么某些供应商有时会以小尾数法 UTF-16 形式提供它们。

我编写了一个简短的脚本来解析的输出file,但我认为它可能非常脆弱。

必须有更好的方法来管理具有多种编码的文件,是否有任何程序或实用程序可以帮助解决此类问题?

我正在使用 Debian 稳定版。

for f in ./*.csv
do
  if  [[ $(file "$f") == *"UTF-16"* ]]
  then
    iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new
    mv "$f"-new "$f"
  fi
done

答案1

我会将您的脚本改进为:

set -o noclobber
for f in ./*.csv
do
  if [ "$(file -b --mime-encoding "$f")" = utf-16le ]; then
    iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new &&
      mv "$f"-new "$f"
  fi
done

相关内容