2010年5月22日土曜日

IMultiLanguage::DetectInputCodepage() が使えない・・・


IMultiLanguage2 でも 3 でも。


・UNICODE BOM に対応していない。
・BOM なし UTF-8 のテキストファイルを食わせると結構な頻度で西ヨーロッパ(Windows-1252)と誤判断。


後者はパラメータで何とかできるのかね?
Chrome つかってて日本語ページを西欧とか抜かすのはこれで文字コード判別してるから?
MS謹製というかIEで使用されているとのことなのでさぞかし立派なものと思ってたんですが・・。


結局、IMultiLanguage::DetectInputCodepage() だけで文字コード判断は辛いものがあり、DOBON.NET」さんの「文字コードを判別する」雅階凡の C# プログラミング」さんの「文字コードの判定」を参考に


①BOM有UTF-8, UTF-16(LE, BE) の判定
②JIS, UTF-16(LE, BE) の判定
③SJIS, EUC, UTF-8 のスコア判定
④IMultiLanguage3::DetectInputCodePage() の判定


としました。両者の考え方をマージした形で実装して良い感じに。


情報を公開してくださっている両氏には感謝。

0 コメント:

コメントを投稿