文件中存在多行编码不一致的状况,这个时候对整个文件的编码转换报错致使的编码转换失败,这里作一个总结。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;";