디렉터리의 모든 파일에 대해 일관된 인코딩을 얻습니다.

디렉터리의 모든 파일에 대해 일관된 인코딩을 얻습니다.

두 가지 다른 인코딩을 사용하는 여러 공급업체의 csv 파일이 포함된 디렉터리가 있습니다.

  • ASCII 텍스트/UTF-8
  • UCS2/UTF-16 리틀 엔디안

나는 전통적인 구문을 사용하여 이러한 데이터 파일에 grep, awk, sed 및 기타 유틸리티를 사용하고 싶습니다.

이러한 파일을 UTF-16에서 UTF-8로 레코딩해도 유용한 데이터는 손실되지 않습니다. 모든 csv 파일에는 ASCII 데이터만 포함되어 있으므로 일부 공급업체가 때때로 리틀 엔디안 UTF-16으로 파일을 제공하는 이유를 이해할 수 없습니다.

출력을 구문 분석하기 위해 짧은 스크립트를 작성했지만 file매우 취약할 수 있다고 생각합니다.

여러 인코딩으로 파일을 관리하는 더 나은 방법이 있어야 합니다. 이러한 유형의 문제를 해결하는 데 도움이 될 수 있는 프로그램이나 유틸리티가 있습니까?

저는 데비안 안정 버전을 사용하고 있습니다.

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

관련 정보