エンコーディングエラーの問題


#!/bin/sh





rm bbb

touch bbb

cat aaa | while read line

do

  echo $line | iconv -f utf8 -t gb2312 >> bbb

done

linuxの下には、ファイルの符号化フォーマットを検出するためのfileという2つの関連コマンドがあります.1つはiconvコマンドで、ファイルを2つの符号化フォーマット間で変換します.しかし、どのように回転しても、時には変換の失敗を報告する問題がよく発生します.私はずっとこれがどういうことなのかと思っています.一つの解釈は、ファイルの一部が破損しているので、全体的な変換ができないということです.では、部分的に破損している以上、部分的に読み取ることができ、部分的に変換することができ、失敗した場所は失敗してしまったので、私は多くの完全な行を変換することができます.
 
その後、上のスクリプトのバグを発見しました.スクリプト変換符号化エラーの場合、エラーの1行はすべて破棄されることを期待していますが、スクリプトはエラーの1行が符号化できる文字列をファイルに書き込み、このようなデータはファイルを破壊します.
#!/bin/sh





rm bbb

touch bbb

cat aaa | while read line

do

        aline=`echo $line | iconv -f utf8 -t gb2312 2>/dev/null`

        echo $aline | awk '{if(substr($0,length($0),1)==";")print $0 >> "'bbb'"}'

done