文件中存在多行編碼不一致的狀況,這個時候對整個文件的編碼轉換報錯致使的編碼轉換失敗,這裏作一個總結。html
可能產生的緣由linux
此時文件內容shell
文件中存在有些行使用的編碼字符集不一致的狀況,這個時候若是使用iconv直接對文件轉換編碼會報錯。bash
# 指定須要轉換的文件
export file="example";
# 抽取文件中的一行來肯定本行文件的編碼
firstLine=`sed -n '1p' "${file}"`; for coded in `iconv --list | sed 's/\/\/$//' | sort`; do echo "${firstLine}" | iconv -f "${coded}" -t utf-8 && echo "${coded}:OK"; done | tee encoding.result;
# 遍歷文件每一行轉換
while read line; do echo "${line}" | iconv -f utf-8 -t utf-8 >> succeed.result || echo "${line}" >> fail.result; done < ${file} &
# 定時查看文件是否轉換完成一直轉換以後的行數(PID替換爲4步驟中的shell返回的pid)
watch -n 5 "ps -ef | grep -v grep | grep PID; [ -f succeed.result ] && wc succeed.result; [ -f fail.result ] && wc fail.result;";