俺と OS/2 と Unicode 文字マッピング、あるいは「ま〜りんちゃん(だけにとどまらない)問題」

というわけで OS/2 における(おもに日本語の)文字マッピング問題です。

まああれです、マイクロソフトの CP932 と JIS (X 0221) とで Unicode へのマッピングが異なる文字がある、というのはよく知られたお話で、たとえばマイクロソフト自身がそのことに関するサポート情報を出しているくらいでございます。それではコードページの本家ともいうべき IBM が出している(いた)OS/2 の PC 日本語コードページ (IBM-932) ではどうなっているのかと申しますと、これがまたどうしてどうして、マイクロソフトとも JIS とも違っているのであります。

まあなんといいますか、ともかく以下の表をごらんください。これは http://www.autumn.org/etc/unidif.html の表の一部を引用し、右端に OS/2Unicode API を使って独自に調査した変換結果を追加したものです(すべての文字をチェックしたわけではありません)。

Source SJIS Source JIS JIS X 0208(+0201) cp932 JDK 1.1.7 JIS X 0221 NT4.0 ShiftJIS VJ++6.0 Apple IBM OS/2 IBM-943
(IBM-932)
0x5C 0x5C 0x00A5 0x005C 0x005C 0x00A5 0x005C 0x00A5 0x005C 0x00A5 0x00A5 0x005C/0x00A5
0x7E 0x7E 0x203E 0x007E 0x007E 0x203E 0x007E 0x203E 0x007E 0x007E 0x203E 0x007E/0x203E
0x7F 0x7F none 0x007F 0x007F none 0x007F none 0x007F none none 0x007F
0x80 none none none none none 0x0080 none none 0x005C none none
0xA0 none none none none none 0xF8F0 none none 0x00A0 none none
0xFD none none none none none 0xF8F1 none none 0x00A9 none none
0xFE none none none none none 0xF8F2 none none 0x2122 none none
0xFF none none none none none 0xF8F3 none none 0x2026 none none
0x8150 0x2131 0xFFE3 0xFFE3 0xFFE3 0xFFE3 0xFFE3 0xFFE3 0xFFE3 0x203E 0xFFE3 0xFFE3
0x815C 0x213D 0x2015 0x2015 0x2015 0x2014 0x2015 0x2015 0x2015 0x2014 0x2014 0x2014
0x815F 0x2140 0x005C 0xFF3C 0xFF3C 0x005C 0xFF3C 0x005C 0xFF3C 0xFF3C 0x005C 0xFF3C
0x8160 0x2141 0x301C 0xFF5E 0x301C 0x301C 0xFF5E 0x301C 0x301C 0x301C 0x301C 0x301C
0x8161 0x2142 0x2016 0x2225 0x2016 0x2016 0x2225 0x2016 0x2016 0x2016 0x2016 0x2016
0x8163 0x2144 0x2026 0x2026 0x2026 0x2026 0x2026 0x2026 0x2026 0x22EF 0x2026 0x2026
0x817C 0x215D 0x2212 0xFF0D 0x2212 0x2212 0xFF0D 0x2212 0x2212 0x2212 0x2212 0x2212
0x8191 0x2171 0x00A2 0xFFE0 0x00A2 0x00A2 0xFFE0 0x00A2 0x00A2 0x00A2 0x00A2 0xFFE0
0x8192 0x2172 0x00A3 0xFFE1 0x00A3 0x00A3 0xFFE1 0x00A3 0x00A3 0x00A3 0x00A3 0xFFE1
0x81CA 0x224C 0x00AC 0xFFE2 0x00AC 0x00AC 0xFFE2 0x00AC 0x00AC 0x00AC 0x00AC 0xFFE2

0x5c (\) と 0x7e (~) だけ二通りの文字コードが書かれていますが、これらの文字に関してはオプションによってマッピングを変更することができるためです。デフォルト設定では太字のほうになります(「変換時にパス名であることを考慮する」オプションがあり、デフォルトで有効になっている)。
それ以外の点ではおおまかに言って、OS/2IBM-932(Unicode API では、IBM-943 へのエイリアスになっている)の Unicode マッピングは、

…という、まあ何と言うかこう、折衷的というか、妥協的というか、そういう曖昧感ただようインプリメンテーションになっています。