Microsoftコードページ932

Microsoft コードページ 932は、マイクロソフト及び、MS-DOSのOEMベンダがShift_JISを独自に拡張した文字コードである。また、同時にCP932は、Shift_JISのWindowsアプリケーションにおける「実装」を指す用語であるとも言える。

この項では、主にShift_JISにおけるマイクロソフトおよび各ベンダの独自拡張部分について言及する。ベンダ独自拡張部分以外の内容については、Shift_JISを参照されたい。

また、マイクロソフト標準キャラクタセットの項目も併せて参照されたい。

1. CP932の呼称の整理
--------------

Windows-31J Windows 3.1  のリリースに合わせて、マイクロソフトが IBMと日本電気  のコードを統合して作った符号化文字集合。1993 年以降、マイクロソフトが自社のドキュメント等で「CP932」という用語を使って表している対象は、常にこの「Windows-31J」である。この名前は IANA に登録されている。 MS932 Java で、「IBM のコードページ 932」と「Windows-31J」を区別するための用語。Windows-31Jを指す。 CP932 MS-DOSとWindowsにおける日本語コードページを表す用語。「Windows-31J」が制定されるまでは、OEMベンダによって文字集合が違う。 MS 漢字コード 「CP932」とほぼ同じ意味の用語である。マイクロソフトが策定したという点や、マイクロソフトが文字を独自に追加した点を強調したい場合に用いられる。また、単に「シフトJIS」のことを指している場合もある。 OEM コードページ 932 Windows 3.1 日本語版の発売以前における、OEMベンダ各自の拡張を許した仕様の文字セット。以下は、マイクロソフトから離れ、現在では公的機関からも認められた文字符号化方式を指す用語である。

シフトJIS JIS X 0208符号化文字集合を一定の規則に従ってシフトした文字符号化方式。具体的な内容はJIS X 0208:1997に「シフト符号化表現」として記載がある。しかし、文脈によってはベンダ拡張されたコードセットを指している場合もある。 Shift_JIS 「シフトJIS」のIANA登録名。 SJIS Shift_JISの短縮形。JavaではShift_JISと同義語。

2. 構造
-----

Shift_JISでは空き領域や未使用であった13区、89 - 92区、115 - 119区に合計845文字を追加。ただし同じ文字が互換性のため重複して含まれており実質447文字の追加である。また、95 - 114区も利用者定義領域となっている。

3. 歴史
-----

3.1. CP932 の誕生と発展
-----------------

CP932が、現在の「Windows-31J」の形として完成に至るまでには複雑な経緯がある。

1982年、JIS C 6226を複雑にシフトさせた文字符号化方式としてShift_JISが誕生した。この符号化方式は、マイクロソフトによりMS-DOSにおける標準日本語コードとして採用され、「コードページ 932 」という管理番号を与えられた。

しかし、マイクロソフトは、MS-DOSにおける唯一の日本語用コードページである「CP932」を、OEMメーカーの自由に任せていた。そのため、NECのPC-9800シリーズ、IBMのPS/55 シリーズ、富士通のFMRシリーズなどは全て、MS-DOSを搭載し文字符号化方式もShift_JISを採用しているコンピュータであるにもかかわらず、登録されている文字集合がバラバラだった。

以下、代表的な2つの実装を解説する。

3.1.1. IBM
----------

1983年、IBMは、日本語処理に重点を置いたデスクトップコンピュータ「マルチステーション5550」を発売する際、利用する符号化文字集合を以下のように定めた。

Shift_JISをベースとする。
JIS C 6226が規定する94区 × 94点の領域に拡張文字追加を行なわない。
95 - 114区をユーザ外字領域とする。
115 - 119区にJIS C 6226に非登録のDBCS-Host文字を登録することで、DBCS-Hostの文字セット全体を表現する。
2バイト文字部分だけの符号化文字集合の名称をDBCS-PCとし、コードページ番号として「301」を割り当てる。
1バイト・2バイト文字全体の符号化文字集合のコードページ番号として「932」を割り当てる。こうしてできたDBCS-PCは1990年発売のDOS/Vにも引き継がれることとなる。

3.1.2. NEC PC-9800
------------------

一方NECは、1983年に PC-9800シリーズの漢字処理オプション提供を開始した。特に、MS-DOSおよびCP/M-86搭載機における漢字ROMに収容する文字集合を以下のように定めた。

Shift_JISをベースとする。
JIPSの9 - 13区の特殊文字領域をそのままの区点番号で配置。
JIS C 6226-1978 非漢字・第一水準漢字・第二水準漢字はそのままの字形で、そのままの区点番号に配置。
IBM のメインフレームの「IBM 漢字 」の中でJIS C 6226に登録の無い漢字をIBMのDBCS-PCと同様の並びで89 - 92区に配置。DBCS-PCと違い、115 - 119区ではなく、GL表現も可能なように追加文字全てを 94区内に全て配置した。

3.2. 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などに搭載している。

統合の概要は以下のとおりである。

マイクロソフトによるIBM & NEC統合の概要
ベースとなる符号化文字集合としてJIS X 0208-1990を採用。
NECが9 - 13区に登録していた特殊文字の内、13区のものだけを継承。この 13区登録の 83文字のことを「NEC特殊文字」と命名。
NECが89 - 92区に登録していた漢字と非漢字は全て継承。このエリアの374文字のことを「NEC選定IBM拡張文字」と命名。
IBMが115 - 119区に登録していた漢字と非漢字も全て継承。このエリアの388文字のことを「IBM拡張文字」と命名。上記の統合以後は、「CP932」と言えば、マイクロソフトの技術文書以外でも、一般的に「Windows-31J」を指すようになった。しかし、統合前の文字セットが全く利用されなくなったというわけではない。例として、Javaでは、「CP932」がIBMの「CP932」を指し、「MS932」が「Windows-31J」を指す。JDK 1.4.1以降では「MS932」の代わりに「Windows-31J」というキーワードでも「Windows-31J」文字セットを指定できるようになっている。

4. 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の段階で追加された文字である。

4.1. 重複文字が含まれる領域
----------------

重複文字が含まれる領域は以下の表のとおりである。



4.2. 文字コード変換時の重複文字の影響
---------------------

文字コード変換を行う際には、この重複文字というのは厄介になる。別の文字コードから、「Windows-31J」に変換する場合に、重複するどちらの文字へと変換するべきかが問題になる。

それに関して、WindowsのAPIの仕様における優先順位は、以下のようになっている。

JIS X 0208-1990の登録文字である場合は、これに統一
例 : 「√」、「∵」、「￢」
「NEC特殊文字」「IBM拡張文字」が重複する場合は、「NEC特殊文字」に統一
例 : 「№}}」 、「㈱}}」、「Ⅲ}}」
「NEC選定IBM拡張文字」「IBM拡張文字」が重複する場合は、「IBM拡張文字」に統一
例 : 「﨑}}」 、「髙}}」 、「ⅲ}}」この基準に従って、Microsoft IME によって、「㈱}}」を入力しようとした場合には、IBM 拡張文字のコードである FA5816進 ではなく、NEC 特殊文字としてのコードである 878A16進 が引き当てられる。

JIS X 0208-1990の登録文字10文字をJIS78を基準した場合の機種依存文字として扱う場合がある。

5. インターネット上での Windows-31J の利用について
---------------------------------

IANAのcharset登録簿には「Windows-31J」が登録されているが、「限定された、または特殊な使用のためのもの」とされており、インターネット上で用いることが推奨されるまでには至っていない。ただし、文字符号化方式としてShift_JISを用いてデータを交換しあう二者間において、明示的に使用が合意されている場合は、Windows-31Jを使っても問題が無い。

Unicode範囲を完全に表現可能なUTF-8等の文字符号化方式を用いてデータの交換をする場合は、話が若干ややこしくなる。IBM拡張文字等のWindows-31J独自追加の文字は、他のJIS X 0208非登録のCJK統合漢字に比べて、異機種間でのデータ交換を、文字化けを起こしたりせずにデータのやり取りが正常に行える確率が高いからである。これについては、デスクトップOSとしてのWindowsの普及率が非常に高いことも理由の1つである。機種依存文字の項も併せて参照のこと。

とは言え、UTF-8などのようなUnicodeの登録文字を全て利用できる文字符号化方式を利用している場合であっても、あえてJIS X 0208登録文字だけを用いてデータ交換を行った方が、問題が起こりにくい。

また、Unicodeに変換した際、一部の文字がShift_JISとは異なるコードに割り当てられていることでの文字化けを起こすことがある。Unicode#波ダッシュ・全角チルダ問題および波ダッシュ#Unicodeに関連する問題を参照のこと。

6. 後の文字集合への影響
-------------

6.1. NEC特殊文字・IBM拡張文字
--------------------

NEC特殊文字や IBM拡張文字はもともとベンダの独断で作られた文字セットであるが、これがデファクトスタンダードとしての影響力を持った結果としてdate=2013年1月}}現在では各種の公的な規格でも全部または一部が採用されている。

6.1.1. NEC特殊文字
--------------

Windows-31J 全83文字を、13区に収録。 「≒」「≡」「∫」「√」「⊥」「∠」「∵」「∩」「∪」の9文字は2区にも重複して収録。 「∵」の1文字はさらに115区にも重複して収録。 Unicode 83文字全てを基本多言語  面に収録。 JIS X 0212-1990 「№」の1文字を2区81点に収録。 JIS X 0213:2004 「≒」「≡」「∫」「√」「⊥」「∠」「∵」「∩」「∪」の9文字は2区に収録。 「∑}} 」の1文字は収録されていない。6区18点のギリシャ大文字シグマ「Σ」で代用できるため。 上記以外の 73文字はWindows-31Jと同一区点上に収録。

6.1.2. IBM拡張文字
--------------

Windows-31J 全388文字を、2ないし 3重複して収録。 Unicode 388文字全てを基本多言語面  に収録。ただし、「羽」「都」「精」「祥」}}などその一部はCJK互換漢字としての採用であり、統合漢字において別の字体を標準とするコードポイントに包摂されているものである。Unicodeに基づいてこれらの字体を特定的に使用したい場合には、統合漢字のIVSを用いることが推奨されている。 JIS X 0212-1990 全388文字中280文字を収録。 このうち漢字部分は全360文字中279文字を収録。 JIS X 0213:2004 全388文字中304文字を収録。 このうち漢字部分は全360文字中276文字を収録。 富士通 JEF 388文字全てを収録。 NEC JIPS 388文字全てを収録。 日立製作所 KEIS  「＇」「＂」以外の386文字を収録。 IBM DBCS-Host 388文字全てを収録。 三菱電機 JSII 388文字全てを収録。 BIPROGY Lets-J 388文字中 328文字を収録。

6.2. JIS X 0208以外の公的規格にて登録のあるNEC特殊文字一覧
--------------------------------------

6.2.1. JIS X 0212-1990に登録されているNEC特殊文字
-------------------------------------

6.2.2. JIS X 0213:2004 に登録されているNEC特殊文字
--------------------------------------

6.3. JIS X 0208以外の公的規格にて登録のあるIBM拡張文字一覧
--------------------------------------

6.3.1. 人名用漢字に登録されているIBM拡張文字
---------------------------

6.3.2. JIS X 0212-1990に登録されているIBM拡張文字
-------------------------------------

6.3.3. JIS X 0213:2004に登録されているIBM拡張文字
-------------------------------------

6.4. CP932に定義されているが、JIS X 0212・JIS X 0213にない文字
----------------------------------------------

JIS X 0213で字形が包摂されているものも含む。

7. CP932の利用者定義領域
----------------

CP932においては、95 - 114区までの1880文字の領域が「利用者定義領域」となっている。

Unicodeとの変換について、Windows APIの仕様では、BMP面の[[外字#JIS X 0221 (Unicode）