Eu refinaria seu script para:
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
Eu tenho um diretório contendo muitos arquivos csv de vários fornecedores com duas codificações diferentes:
Eu gostaria de usar grep, awk, sed e outros utilitários nesses arquivos de dados usando a sintaxe convencional.
Recodificar esses arquivos de UTF-16 para UTF-8 não perde nenhum dado útil. Todos os arquivos csv contêm apenas dados ASCII, então está além de mim porque eles estão sendo fornecidos como UTF-16 little-endian por alguns fornecedores, em parte do tempo.
Eu escrevi um pequeno script que analisa a saída de file
, mas acho que é bem frágil.
Deve haver maneiras melhores de gerenciar arquivos com várias codificações, existem programas ou utilitários que podem ajudar com esse tipo de problema?
Estou usando o Debian Stable.
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
Eu refinaria seu script para:
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
Tags files character-encoding