Unicodeと各コードページ間での変換
Windows では、Unicodeと各コードページの間で文字列を変換するための関数として、従来からの MultiByteToWideChar および WideCharToMultiByte といった Kernel32.dll に含まれる系列と、
Mlang.DLL に含まれる ConvertINetString や ConvertINetUnicodeToMultiByte、ConvertINetMultiByteToUnicode の系列の2種類が用意されています。
また Unicode を除く、日本語に関するコードページは
- 932 (ANSI/OEM - 日本語 Shift-JIS)
- 20932 (JIS X 0208-1990 & 0212-1990)
- 50220 (ISO-2022 日本語、半角カタカナなし)
- 50221 (ISO-2022 日本語、半角カタカナ)
- 50222 (ISO-2022 日本語 JIS X 0201-1989)
- 51932 (EUC - Japanese)
の6種類があります。*1
U+0020〜U+FFFFまでのUnicodeの各文字が、それぞれの変換機構およびそれぞれのコードページでどのようにマッピングされるのかを調べ、一覧を作成してみました。
これをみると、
- Microsoft が EUC-JP だとしている CP51932 は、MLang.DLL では変換可能ですが、Kernel32.DLL では変換不可能なこと
- 50220 や 50221、50222 の ISO-2022 系のコードページでは、Kernel32.DLL では JIS X 0212-1990 の補助漢字が扱えるが、MLang.DLL ではそうではないこと
- 世間で EUC-JP だとされている CP20932 と、Microsoft が EUC-JP だとしている CP51932 は、変換ルールが異なっていること
などがわかります。
*1: ()内は、GetCPInfoEx により得られたものです。ただし、51932 に関しては、GetCPInfoEx では情報を取得できませんので、Code Page Identifiers に挙げられている説明を書いてあります。