文字コードの変換
あまり知られていないことですが、WindowsのAPIである MultiByteToWideChar および WideCharToMultiByte を使うと、ISO-2022-JPやUTF-8などの各種の文字コードを変換することができます。正確に言うと、Unicodeとそれ以外のコードページ間で文字列をマップすることができる、ということです。変換は、Unicodeとそれ以外のコードページの間で行うことになりますので、ISO-2022-JPとシフトJIS(Windows-31J)のような、Unicode以外の文字コード間での変換では、いったん文字列をUnicodeに変換してやる必要があります。
ここまで説明なしに「Unicode」と書きましたが、実はこれは Microsoft 特有の表現であり、UnicodeのUTF-16LEのことを意味しています。同じUnicode*1でもUTF-7やUTF-8は特定のコードページを持ったMBCSすなわちマルチバイト文字セットという扱いになっています。すなわち、Windowsにおける文字コードの変換は、UTF-16LEを軸にそれ以外の文字コード、符号化方式を変換する、ということになります。
ISO-2022-JP ↕ シフトJIS ↔ UTF-16LE ↔ UTF-8 ↕ UTF-7
勘の鋭い方なら、ここまで意図的にEUC-JPを含めていないことに気づいていると思います。
実は、日本語EUCはコードページ51932として定義されているはずなのですが、手元で試した限り、WideCharToMultiByteが常にERROR_INVALID_PARAMETERを返し、正常に変換できなかったのです。
Windowsのコードページ番号の一覧は http://msdn.microsoft.com/library/en-us/intl/unicode_81rn.asp にあります。
これらのコーディングの実例は後日。