yohgaki's blog - これからのプログラムの作り方 - 文字エンコーディング検証は必須

これからプログラマは常識として以下の項目を実践すべきと思います。

  • 文字エンコーディングが妥当であるか必ず入力検査時にチェックする
  • 壊れた文字エンコーディングを見つけた場合はエラーにして処理を中止する(当然エラーを記録する)
  • 壊れた文字は「絶対」に削除しない
  • 壊れた文字を置き換える場合は安全性に十分注意する(非推奨)
  • システムで利用する文字エンコーディングはできるだけ統一する(努力目標)

加えて言うと、UTF-8 などにおいて、双方向文字や制御記号を利用した視覚的な欺瞞に注意することや、暗黙のうちに他のエンコーディングに変換される可能性があることに注意する、などでしょうか。前者は利用可能な文字一覧をあらかじめ作っておくことにより対処できます。後者は例えば Windows であればアプリケーションによってファイル名がANSIで扱われたりとプログラマだけで全てを把握することは難しいですが、それも時間とともに徐々に改善されて行くのだろうと思います。