Obtenha codificação consistente para todos os arquivos no diretório

5

Eu tenho um diretório contendo muitos arquivos csv de vários fornecedores com duas codificações diferentes:

  • Texto ASCII / UTF-8
  • UCS2 / UTF-16 little endian

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
    
por jon 16.07.2015 / 12:22

1 resposta

2

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
    
por 28.07.2016 / 17:19