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
この記事によると、
- EUC-JP→Unicode じゃなくて EUC-JP→Shift_JIS→Unicode という順番で変換が行われる
- しかも、EUC-JP→Shift_JIS の時に、変換できなかったバイトをそのまま残してしまう
という 2 点が原因だという。
Shift_JIS を経由するのはまぁわかるとして、変換できないっていうのはどういうことなのか。その疑問には、同じ blog の 1 つ前の記事が答えてくれた。
eucJP-ms は、オープン・グループ / 日本ベンダ協議会 が定義したもので、(中略)
コードページ932 - eucJP-ms と CP51932 の違い
一方、cp51932 は、マイクロソフトが定義したもので、(中略)
注意点としては、ユーザー定義文字を扱えるかどうかという事と、JIS X 0208 の 85区〜94区のコード割り当てが eucJP-ms と cp51932 とで異なるという事です。
つまり、いわゆる「補助漢字」を使うと、化ける可能性が高いってことだ。
校長先生怒りましたよ
怒りましたよっていうか、ここで疲れた。