Microsoftコードページ932

Microsoft コードページ 932は（以下 CP932）、マイクロソフト及び、MS-DOSのOEMベンダがShift_JISを独自に拡張した文字コードである。また、同時にCP932は、Shift_JISのWindowsアプリケーションにおける「実装」を指す用語であるとも言える。
この項では、主にShift_JISにおけるマイクロソフトおよび各ベンダの独自拡張部分について言及する。ベンダ独自拡張部分以外の内容については、Shift_JISを参照されたい。
また、マイクロソフト標準キャラクタセットの項目も併せて参照されたい。
CP932の呼称（別名）の整理.
以下は、マイクロソフトから離れ、現在では公的機関からも認められた文字符号化方式を指す用語である。
構造.
Shift_JISでは空き領域や未使用であった13区(874016 - 879E16)、89 - 92区(ED4016 - EEFC16)、115 - 119区(FA4016 - FC9E16)に合計845文字を追加。ただし同じ文字が互換性のため重複して含まれており実質447文字の追加である。また、95 - 114区(F04016 - F9FC16)も利用者定義領域（外字領域）となっている。
歴史.
CP932 の誕生と発展.
CP932が、現在の「Windows-31J」の形として完成に至るまでには複雑な経緯がある。
1982年（JIS X 0208-1983策定の前年）、JIS C 6226(JIS X 0208)を複雑にシフトさせた文字符号化方式としてShift_JISが誕生した。この符号化方式（を利用した拡張符号化文字集合）は、マイクロソフトによりMS-DOSにおける標準日本語コードとして採用され、「コードページ 932 (CP932)」という管理番号を与えられた。
しかし、マイクロソフトは、MS-DOSにおける唯一の日本語用コードページである「CP932」を、OEMメーカーの自由に任せていた。そのため、NECのPC-9800シリーズ、IBMのPS/55 シリーズ、富士通のFMRシリーズなどは全て、MS-DOSを搭載し文字符号化方式もShift_JISを採用しているコンピュータであるにもかかわらず、登録されている文字集合がバラバラだった。
以下、代表的な2つの実装を解説する。
IBM.
1983年、IBMは、日本語処理に重点を置いたデスクトップコンピュータ「マルチステーション5550」を発売する際、利用する符号化文字集合を以下のように定めた。
こうしてできたDBCS-PCは1990年発売のDOS/Vにも引き継がれることとなる。
NEC PC-9800.
一方NECは、1983年に PC-9800シリーズの漢字処理オプション提供を開始した。特に、MS-DOSおよびCP/M-86搭載機における漢字ROMに収容する文字集合を以下のように定めた。
OEMコードページの統合.
マイクロソフトは1993年、Windows 3.1の日本語版を出すにあたり、「CP932の誕生と発展」節で述べたように多様化した「CP932」の仕様をOEMメーカーの自由に任せるという方針を撤回した。日本のパーソナルコンピュータ市場で、特に大きなシェアを持つ上記2社の統合コードをWindowsにおける日本語標準コードとし、また、これをIANAに「Windows-31J」という名で登録した。IANA登録名の「Windows-31J」とは、読んで字のごとく、「Windows3.1 Japanese」を意味している。IBMはマイクロソフトによる「CP932」の統合を受けて、「Windows-31J」と各文字のコードポイントまで同一にした「CP943」を策定し、同社のOSであるOS/2、AIX、DBMSであるDB2などに搭載している。
統合の概要は以下のとおりである。
上記の統合以後は、「CP932」と言えば、マイクロソフトの技術文書以外でも、一般的に「Windows-31J」を指すようになった。しかし、統合前の文字セットが全く利用されなくなったというわけではない。例として、Javaでは、「CP932」がIBMの「CP932」を指し、「MS932」が「Windows-31J」を指す。JDK 1.4.1以降では「MS932」の代わりに「Windows-31J」というキーワードでも「Windows-31J」文字セットを指定できるようになっている。
Windows-31J に重複登録されたコード.
前節で触れたように、「Windows-31J」はNECとIBMのそれぞれのコードを統合して（互換性を維持する形で）作られた経緯があるため文字の重複があり、大まかに言えば「NEC選定IBM拡張文字」と「IBM拡張文字」がほぼまるごと重複している。漢字部分についていえば、すべての漢字がきっかり2つずつ登録されている。
以下、拡張文字を（非符号化）文字集合として詳しく見ると、まずNEC選定IBM拡張は漢字360文字と小文字のローマ数字、およびで構成されるが、これらはすべてIBM拡張に含まれる。IBM拡張はこのNEC選定IBM拡張に、大文字のローマ数字との計14文字を加えたものである。そしてこの差分の14文字はすべてNEC特殊文字にも含まれており、NEC特殊文字はこの14文字と、IBM拡張・NEC選定IBM拡張のいずれにも含まれない69文字で構成される。したがってNEC選定IBM拡張文字とNEC特殊文字を合わせると、過不足のない拡張文字の集合の全体になる。また、これらのうちでJIS X 0208:1990と重複するのは非漢字のみであり、それは3重複である「￢」「∵」の2文字と、NEC特殊文字との2重複である「≒」「≡」「∫」「√」「⊥」「∠」「∩」「∪」の8文字である。なお、JIS X 0208:1990の持つこれら10文字の重複はすべて、JIS X 0208:1983の段階で追加された文字である。
重複文字が含まれる領域.
重複文字が含まれる領域は以下の表のとおりである。
文字コード変換時の重複文字の影響.
文字コード変換を行う際には、この重複文字というのは厄介になる。別の文字コードから、「Windows-31J」に変換する場合に、重複するどちらの文字へと変換するべきかが問題になる。
それに関して、WindowsのAPIの仕様における優先順位は、以下のようになっている。
この基準に従って、Microsoft IME によって、「（かっこかぶ）」を入力しようとした場合には、IBM 拡張文字のコードである FA5816進 ではなく、NEC 特殊文字としてのコードである 878A16進 が引き当てられる。
JIS X 0208-1990の登録文字10文字（「≒」「≡」「∫」「√」「⊥」「∠」「∵」「∩」「∪」「￢」）をJIS78を基準した場合の機種依存文字として扱う場合がある。
インターネット上での Windows-31J の利用について.
IANAのcharset登録簿には「Windows-31J」が登録されているが、「限定された、または特殊な使用のためのもの」とされており、インターネット上で用いることが推奨されるまでには至っていない。ただし、文字符号化方式としてShift_JISを用いてデータを交換しあう二者間において、明示的に使用が合意されている場合は、Windows-31Jを使っても問題が無い。
Unicode範囲を完全に表現可能なUTF-8等の文字符号化方式を用いてデータの交換をする場合は、話が若干ややこしくなる。IBM拡張文字等のWindows-31J独自追加の文字は、他のJIS X 0208非登録のCJK統合漢字に比べて、異機種（OS / アプリケーション）間でのデータ交換を、文字化けを起こしたりせずにデータのやり取りが正常に行える確率が高いからである。これについては、デスクトップOSとしてのWindowsの普及率が非常に高いことも理由の1つである。機種依存文字の項も併せて参照のこと。
とは言え、UTF-8などのようなUnicodeの登録文字を全て利用できる文字符号化方式を利用している場合であっても、あえてJIS X 0208登録文字だけを用いてデータ交換を行った方が、問題が起こりにくい。
また、Unicodeに変換した際、一部の文字がShift_JISとは異なるコードに割り当てられていることでの文字化けを起こすことがある。Unicode#波ダッシュ・全角チルダ問題および波ダッシュ#Unicodeに関連する問題を参照のこと。
後の文字集合への影響.
NEC特殊文字・IBM拡張文字.
NEC特殊文字や IBM拡張文字はもともとベンダの独断で作られた文字セットであるが、これがデファクトスタンダードとしての影響力を持った結果として現在では各種の公的な規格でも全部または一部が採用されている。
CP932に定義されているが、JIS X 0212・JIS X 0213にない文字.
JIS X 0213で字形が包摂されているものも含む。
CP932の利用者定義領域.
CP932においては、95 - 114区までの1880文字の領域が「利用者定義領域（外字領域）」となっている。
Unicodeとの変換について、Windows APIの仕様では、BMP面の私用領域 6400文字分の領域の先頭から1880文字目までと、95 - 114区の当領域を1対1の写像変換するようになっている。
Windows-31J以外のベンダ拡張シフトJIS.
アップルコンピュータのシフトJIS.
Apple Computerは自社のコンピュータのOSとしてMS-DOSやCP/M-86を採用しなかったが、Macintoshが用いる文字コードとしてシフトJISを利用した。
そのMacintosh（漢字 Talk 7.1 以降）搭載のシフトJISの9 - 15区にはアップルコンピュータ独自の特殊文字が登録されている。このエリアには13区が含まれるため、Windows-31Jの「NEC特殊文字」領域と被っている。文字の例を挙げれば、NEC特殊文字の「」は Apple特殊文字の「」が同じコードポイントに登録されている。さらに、117区に「縦書き用文字」が登録されている点も Windows-31J と異なる。IBM拡張文字の領域は存在しない。この文字コードについては、MacJapanese を参照のこと。
漢字Talk 6以前のMacintosh では、NEC互換のシフトJISが使われており、13区のNEC特殊文字もMacintosh上で利用できた。macOS標準ウェブブラウザのSafariでは、Mac用シフトJIS (MacJapanese) で表示するのか、Windows-31Jで表示するのかを選択できる。
富士通のシフトJIS.
富士通のMS-DOS搭載コンピュータのOEMコードページ932として使われる文字コードに、「R90」というものがある。これはFMRシリーズで利用された。この符号化文字集合の特徴は、87 - 93区に「OASYS 拡張文字」の領域を持つことである。ベースとなる文字集合はJIS X 0208-1990であるが、第一水準漢字の中で「78⇔83非入替文字」でない漢字（203文字）の字形をJIS C 6226-1978に合わせてある点に特色がある。なお、富士通のマニュアル等では、「R90」のことを「SJIS (R90)」と呼び、「Windows-31J」のことを「SJIS (MS)」と呼んで区別している。
iモードのシフトJIS.
NTTドコモのiモードは標準日本語コードにシフトJISを採用している。この文字集合においてはJIS X 0208-1990を以下のように拡張している。
京セラ・AH-K3001V のシフトJIS.
京セラのPHS・AH-K3001Vの搭載するシフトJIS は、9 - 13区にPC-9800シリーズ用の特殊文字が搭載されている。
文字コード 5C と 7E の文字について.
文字コード 5C と 7E については、 とも X 0201 とも違う文字が登録されている。日本人の多くが「文字」と呼んでいるものは実は、「-31J 文字」であるということも言われている。（しかし少なくともIANAにおける -31J の定義は X 0201を用いるものである）
マイクロソフトが規定するCP932に関連があるコード.
Eメールで用いるために7ビットコードで「Windows-31J」の文字集合（=マイクロソフト標準キャラクタセット）を表現した「CP50220」や、GR領域にマイクロソフト標準キャラクタセットを表現した「CP51932」というものがある。これらは、マイクロソフトのInternet Explorerや、EmEditor、秀丸エディタなどのWindowsアプリケーションで利用されている。