晴耕雨読

working in the fields on fine days and reading books on rainy days

iconvでエンコードをUTF16をUTF8に変換する

LinuxのBashでUTF16をUTF8に変換する方法について説明します。 エンコードを変更するには iconv コマンドを使用します。

iconv -f UTF-16LE -t UTF-8 ファイル名


UTF16からUTF8へ変換する

エンコーディングがUTF16のTXTファイルをまとめてUTF8に変換するには、以下のシェルスクリプトを実行します。

for filename in *.txt; do
  filetype=$(file -i $filename)
  if echo $filetype | grep 'charset=utf-16le' &>/dev/null; then
    iconv -f UTF-16LE -t UTF-8 "$filename" > "$filename.new" \
    && mv "$filename.new" "$filename"
  fi
done

ファイルのエンコードを特定するには、file コマンドを使用します。 file -i の結果に「charset=utf-16le」という文字列が含まれる場合のみ、iconvでエンコードを変換します。 iconvの入力が「UTF-16LE」、出力が「UTF-8」とすることで、エンコードを変換することができます。

※UTF-16LE以外のファイルを入力するとエラーになるため、if文で入力をチェックする処理を追加する必要があります。

以上です。