我有一个目录,其中包含来自不同供应商的大量 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