Microsoft コードページ 932(マイクロソフト コードページ 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」を発売する際、利用する符号化文字集合を以下のように定めた。

- 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にも引き継がれることとなる。

#### NEC PC-9800

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

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

### 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文字と小文字のローマ数字「i」‐「x」、および「¬」「¦」「'」「"」で構成されるが、これらはすべてIBM拡張に含まれる。IBM拡張はこのNEC選定IBM拡張に、大文字のローマ数字「I」‐「X」と「(株)」「No」「TEL」「∵」の計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が符号化の対象とする文字集合

|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| IBM拡張文字(388文字) | | | | |  |  |
|  | NEC選定IBM拡張文字(374文字) | |  |  | NEC特殊文字(83文字) | |
|  | 373文字  iiiiiiivvviviiviiiixx¦'" 纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑 | |  | 13文字  IIIIIIIVVVIVIIVIIIIXXNoTEL(株) | 61文字  1234567891011121314151617181920ミリキロセンチメートルグラムトンアールヘクタールリットルワットカロリードルセントパーセントミリバールページmmcmkmmgkgccm2平成〝〟KK上中下左右(有)(代)明治大正昭和∮∑∟⊿ |  |
|  |  | 1文字 ¬ |  | 1文字 ∵ | 8文字 ≒≡∫√⊥∠∩∪ |  |
|  |  |  |  |  |  |  |
|  | | 6869文字 (省略) | | |  |  |
|  |  | JIS X 0208:1990(6879文字) | | | |  |

### 重複文字が含まれる領域

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

| 文字種名 | コードポイント(16進数表記) | 区番号 | 重複文字数 |
| --- | --- | --- | --- |
| JIS X 0208の非漢字(1983年追加文字)の一部 | - | 2区 | 10文字 |
| NEC特殊文字 | 8740 - 879C | 13区 | 22文字 |
| NEC選定IBM拡張文字 | ED40 - EEFC | 89 - 92区 | 374文字(全部) |
| IBM拡張文字 | FA40 - FC4B | 115 - 119区 | 388文字(全部) |

### 文字コード変換時の重複文字の影響

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

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

1. JIS X 0208-1990の登録文字である場合は、これに統一
   - 例 : 「√(ルート)」、「∵(なぜならば)」、「¬(否定)」
2. 「NEC特殊文字」「IBM拡張文字」が重複する場合は、「NEC特殊文字」に統一
   - 例 : 「No(ナンバー)」 、「(株)(かっこかぶ)」、「III(大文字ローマ数字の3)」
3. 「NEC選定IBM拡張文字」「IBM拡張文字」が重複する場合は、「IBM拡張文字」に統一
   - 例 : 「﨑(たちざき)」 、「髙(はしごだか)」 、「iii(小文字ローマ数字の 3)」

この基準に従って、Microsoft IME によって、「(株)」を入力しようとした場合には、IBM 拡張文字のコードである FA5816進 ではなく、NEC 特殊文字としてのコードである 878A16進 が引き当てられる。

| 文字種別 | 文字数 | Windows-31J変換後に残る文字数 |
| --- | --- | --- |
| NEC特殊文字 | 83文字(非漢字83文字) | 74文字 |
| NEC選定IBM拡張文字 | 374文字(非漢字14文字、漢字360文字) | 0文字 |
| IBM拡張文字 | 388文字(非漢字28文字、漢字360文字) | 373文字 |
| 合計 | - | 447文字(非漢字87文字、漢字360文字) |

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拡張文字はもともとベンダの独断で作られた文字セットであるが、これがデファクトスタンダードとしての影響力を持った結果として現在では各種の公的な規格でも全部または一部が採用されている。

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

#### JIS X 0212-1990に登録されているNEC特殊文字(全部)

No

#### JIS X 0213:2004 に登録されているNEC特殊文字(全部)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 I II III IV V VI VII VIII IX X ミリ キロ センチ メートル グラム トン アール ヘクタール リットル ワット カロリー ドル セント パーセント ミリバール ページ mm cm km mg kg cc m2 平成 〝 〟 No KK TEL 上 中 下 左 右 (株) (有) (代) 明治 大正 昭和 ≒ ≡ ∫ ∮ √ ⊥ ∠ ∟ ⊿ ∵ ∩ ∪

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

#### 人名用漢字(2004年改正)に登録されているIBM拡張文字(全部)

寬 薰 瀨 增 德 賴 朗 橫 黑 緖 諸 祥 神 都 福 郞

#### JIS X 0212-1990に登録されているIBM拡張文字(全部)

No 丨 仡 伀 伃 伹 佖 侊 侒 侔 侚 俉 俍 俿 倞 倢 偀 偂 偆 偰 傔 僘 兊 兤 冝 冾 刕 劜 劦 劯 勀 勛 匀 卲 厓 厲 叝 咜 咩 哿 喆 坥 垬 埇 埈 墲 夋 奓 奛 奝 奣 妤 妺 孖 寀 寘 尞 岦 岺 崧 嵂 嵭 嶸 嶹 巐 弡 弴 彅 彧 忞 恝 悊 惕 惞 惲 愑 愰 愷 憘 戓 抦 揵 摠 撝 擎 昀 昉 昕 昞 昤 昮 昱 晗 晙 曻 晳 暙 暠 暲 暿 曺 朎 杦 枻 柀 桒 桄 棈 棏 楨 榘 槢 樰 橆 橳 橾 櫤 毖 氿 汜 汯 沆 泚 洄 浯 涇 涖 涬 淏 淼 渧 渹 渼 湜 溿 澈 澵 濵 瀅 瀇 炅 炫 焄 焏 煆 煇 煜 燁 燾 犱 犾 猤 獷 玽 珉 珒 珖 珣 珵 琇 琦 琩 琪 琮 瑢 璉 璟 甯 畯 皛 皜 皦 睆 砡 硎 硤 硺 禔 禛 竑 竫 箞 絈 絜 綷 繒 纊 罇 羡 茁 荿 菇 菶 葈 蒴 蓜 蕓 蕙 蕫 裵 褜 訒 訷 詹 誧 誾 諟 諶 譓 賰 贒 軏 遧 鄧 釗 釚 釞 釤 釥 釭 釮 鈆 鈊 鈐 鈹 鈺 鈼 鉀 鉎 鉑 鉙 鉧 鉷 鉸 銈 銧 鋐 鋓 鋕 鋗 鋙 鋠 鋧 鋹 鋻 鋿 錂 錝 錞 錡 錥 鍈 鍗 鍰 鎤 鏆 鏞 鏸 鐱 鑅 鑈 隝 隯 霳 靃 靏 靕 顗 顥 餧 驎 髜 魵 鮏 鮱 鮻 鰀 鵫 鵰 鸙

#### JIS X 0213:2004に登録されているIBM拡張文字(全部)

i ii iii iv v vi vii viii ix x I II III IV V VI VII VIII IX X ¬ ¦ ' " (株) No TEL ∵ 丨 仡 伃 佖 侊 侔 俉 偀 傔 兊 冝 刕 勛 匀 匇 厓 厲 咜 咩 哿 喆 﨏 埇 埈 塚 增 奝 妤 孖 寘 寬 尞 岺 崧 﨑 嵓 嵭 嶸 弴 彅 彧 德 忞 惕 愰 愷 揵 摠 擎 昀 昉 昕 昞 昤 昱 曻 晙 晥 晳 暠 暲 曺 朗 杦 枻 柀 栁 桒 棈 楨 﨔 槢 橫 橳 櫤 毖 汜 沆 洄 涇 涬 淼 湜 澈 濵 瀅 瀨 炅 炫 焏 煆 煇 煜 凞 燁 燾 犾 猪 珉 珖 珣 琇 琦 琪 琮 瑢 璉 璟 甁 甯 畯 皛 皞 皦 睆 硎 神 祥 福 竫 箞 絈 絜 綠 緖 繒 纊 罇 茁 荢 菇 葈 蒴 蕙 﨟 薰 裵 褜 訒 訷 詹 誧 諟 諶 諸 賴 贒 郞 都 鄕 鄧 釗 釤 釥 釭 鈐 鈹 鈺 鈼 鉀 鉸 銈 鋓 鋠 鋿 錡 錥 鍈 鍰 鏆 鏞 隆 隝 霳 霻 靍 靏 顗 顥 馞 驎 魲 魵 鮏 鰀 鵰 黑 伀 侒 侚 倞 倢 偂 偆 偰 劦 劯 匤 咊 垬 夋 奛 寀 岦 嵂 嶹 悊 惲 憘 抦 撝 晗 暙 暿 桄 﨓 棏 榘 樰 橆 橾 氿 泚 淏 渧 渼 溿 澵 瀇 炻 焄 犱 獷 皜 砡 硤 礰 禔 禛 竑 竧 綷 荿 蓜 蕓 蘒 﨡 誾 譿 賰 﨤 釚 釮 鈊 鉎 鉑 鉙 鉧 銧 鋐 鋗 鋙 鋧 鋹 鋻 錂 錝 錞 鍗 鑅 隯 靕 髜 鮱 鵫 鸙

### 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特殊文字の「1」は 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を以下のように拡張している。

- 13区にPC-9800シリーズ用の特殊文字が搭載されている。NEC選定IBM 拡張文字は搭載されていない。
- 112 - 114区に絵文字を登録している。この 112 - 114区というのは、CP932における 95 - 114区にある1880文字のユーザ外字登録領域の最後尾の位置に当たる。

### 京セラ・AH-K3001V のシフトJIS

京セラのPHS・AH-K3001Vの搭載するシフトJIS は、9 - 13区にPC-9800シリーズ用の特殊文字が搭載されている。

## 文字コード 5C と 7E の文字について

文字コード 5C と 7E については、ASCII とも JIS X 0201 とも違う文字が登録されている。日本人の多くが「ASCII文字」と呼んでいるものは実は、「Windows-31J 文字」であるということも言われている。(しかし少なくともIANAにおける Windows-31J の定義は JIS X 0201を用いるものである)

|  | 5C | 7E |
| --- | --- | --- |
| ASCII | \ (バックスラッシュ) |  ̃ (チルダ) |
| JIS X 0201 | ¥ (円記号) |  ̄ (オーバーライン) |
| Windows-31J | ¥ (円記号) |  ̃ (チルダ) |

## マイクロソフトが規定するCP932に関連があるコード

Eメールで用いるために7ビットコードで「Windows-31J」の文字集合(=マイクロソフト標準キャラクタセット)を表現した「CP50220」や、GR領域にマイクロソフト標準キャラクタセットを表現した「CP51932」というものがある。これらは、マイクロソフトのInternet Explorerや、EmEditor、秀丸エディタなどのWindowsアプリケーションで利用されている。

Internet Explorer 6.0(日本語版)における表記と Microsoft コードページの対応

| IE6.0における表記 | マイクロソフトのコードページ | 文字集合と符号化方式 |
| --- | --- | --- |
| 日本語(シフト JIS) | CP932 | マイクロソフト標準キャラクタセットをシフト符号化表現 |
| 日本語 (JIS) | CP50220 | マイクロソフト標準キャラクタセットをRFC1468符号化表現 |
| 日本語 (EUC) | CP51932 | マイクロソフト標準キャラクタセットをGR表現 |
| Unicode | CP1200 | UnicodeをUTF-16 (Little Endian) で符号化 |
| Unicode (Big-Endian) | CP1201 | UnicodeをUTF-16 (Big Endian) で符号化 |
| Unicode (UTF-8) | CP65001 | UnicodeをUTF-8で符号化 |