Windows で EUC-JP を扱う場合の注意点

Windows 上で、EUC-JP のテキストを Shift_JIS に変換しようとして、ちょっと調べたことのメモ。
結論から言うと、補助漢字を含む場合は文字化けする可能性高し。

私にいい考えがある

何を使って実装するかにもよるけど、たとえば ADODB を使って変換することができる。ADODB は DB アクセスのためのライブラリだけど、なぜかストリーム関連のクラスが付いてる。

WinOfSql - EUC で LF 改行のデータを SHIFT_JIS として読む
http://winofsql.jp/VA003334/vbsguide051231064500.htm

なんだ、簡単じゃん。これなら WSH で 1 個作れば終わるな。……と思っちゃったんだけど、念のためもう少しぐぐってみた。

だめじゃん!

hoshikuzu | star_dust dairy - IEにおけるEUC-JPの処理方法でShift_JISがからんでくる件
http://d.http://d.hatena.ne.jp/hoshikuzu/20071018#p1

EUC-JP のファイルを IE で見ると化ける現象について書かれているじゃないか。
慌てて試してみたけど、やっぱり ADODB でも同じ。たぶん、Windows 標準のアプリやライブラリだと、みんな同じことになるんじゃないかな。

なぜにWhy?

上の記事で変換に失敗している文字、よく見ると、ちょっとレアっぽい? っていうか、JIS X 0208 の漢字じゃないよねこれ。臭う、臭うぞッ!
と思ってさらにぐぐってたどり着いたのがこちら。

コードページ932 - 「[區鳥]」が「乗ス」に化けるメカニズム
http://msyk.at.webry.info/200611/article_2.html

この記事によると、

  1. EUC-JP→Unicode じゃなくて EUC-JP→Shift_JISUnicode という順番で変換が行われる
  2. しかも、EUC-JP→Shift_JIS の時に、変換できなかったバイトをそのまま残してしまう

という 2 点が原因だという。
Shift_JIS を経由するのはまぁわかるとして、変換できないっていうのはどういうことなのか。その疑問には、同じ blog の 1 つ前の記事が答えてくれた。

eucJP-ms は、オープン・グループ / 日本ベンダ協議会 が定義したもので、(中略)
一方、cp51932 は、マイクロソフトが定義したもので、(中略)
注意点としては、ユーザー定義文字を扱えるかどうかという事と、JIS X 0208 の 85区〜94区のコード割り当てが eucJP-ms と cp51932 とで異なるという事です。

コードページ932 - eucJP-ms と CP51932 の違い

つまり、いわゆる「補助漢字」を使うと、化ける可能性が高いってことだ。

校長先生怒りましたよ

怒りましたよっていうか、ここで疲れた。