流れはこんな感じだった。
- BOM チェックで Unicode を判別
- chardet などでエンコーディングを推定
- UTF/MBCS ならデコード試行
- ユーザーロケールのエンコーディングでデコード試行
- chardet などでエンコーディングを推定
- 非 UTF/MBCS ならデコード試行
- 結果が UTF/MBCS なら次の判別で優先的に試行する
問題点:
- ユーザー情報がないとかなりどうしようもない
- 判別が成功したかどうか判別できない
- 間違ったエンコーディングでもデコード出来ることは多い
- 既に化けているデータには手も足も出ない
- chardet などの自動判別では SBCS の判別は不可能に近い
- MBCS 非対応ソフトは MBCS の lead byte でぶった切ることがある
エンコーディングの採用基準:
- 最近のフォーマット・仕様は UTF-8 が多い
- UTF-8 じゃなかったら逃げ出した方が楽
- 国際化を少しでも考えているものはなんらかの UTF を使っている
- 昔のは OS (Windows) の標準エンコーディングをそのまま使っている。コードページくらい埋め込め