编码出错的问题
#!/bin/shrm bbb
touch bbb
cat aaa | while read line
doecho $line | iconv -f utf8 -t gb2312 >> bbb
done
linux下關于編碼有兩個相關命令,一個是file,用于檢測文件編碼格式。一個是iconv命令用于將文件在兩種編碼格式之間轉換。但是,經常會出現一個問題,就是不管怎么轉,有的時候就是會報告轉換失敗,我一直在想這是怎么回事?一種可以說通的解釋是文件的一部分已經損壞掉,所以無法進行整體轉換,那么我產生一個想法,既然是部分損壞,那么我可以部分讀出,部分轉換,失敗掉的地方就失敗掉好了,我可以把大多數完整的行給轉換出來。
?
之后發現上面腳本的一個BUG:我期望的是當腳本轉換編碼錯誤時,出錯的一行被整個放棄,但是腳本還是將出錯那一行能夠編碼的字符串寫入文件,這樣的數據會破壞文件
#!/bin/shrm bbb touch bbb cat aaa | while read line doaline=`echo $line | iconv -f utf8 -t gb2312 2>/dev/null`echo $aline | awk '{if(substr($0,length($0),1)==";")print $0 >> "'bbb'"}' done?
?
轉載于:https://www.cnblogs.com/code-style/p/3469362.html
總結
- 上一篇: 第一个java程序(hdu 1001)
- 下一篇: Div的移动和变化