Microsoftコードページ932
Microsoft コードページ 932(以下 CP932)は、マイクロソフト及び、MS-DOSのOEMベンダがShift_JISを独自に拡張した文字コードである。また同時に、CP932はShift_JISのWindowsアプリケーションにおける「実装」を指す用語であるとも言える。
この項では、主にShift_JISにおけるマイクロソフトおよび各ベンダの独自拡張部分について言及する。ベンダ独自拡張部分以外の内容については、Shift_JISを参照されたい。
また、マイクロソフト標準キャラクタセットの項目も併せて参照されたい。
目次
- 1 CP932の呼称(別名)の整理
- 2 CP932 の誕生と発展
- 3 OEMコードページの統合
- 4 Windows-31J に重複登録されたコード
- 5 インターネット上での Windows-31J の利用について
- 6 NEC特殊文字・IBM拡張文字
- 7 JIS X 0208以外の公的規格にて登録のあるNEC特殊文字一覧
- 8 IBM拡張文字を名前に持つ有名人
- 9 JIS X 0208以外の公的規格にて登録のあるIBM拡張文字一覧
- 10 CP932に定義されているが、JIS X 0212・JIS X 0213にない文字
- 11 CP932の利用者定義領域
- 12 Windows-31J以外のベンダ拡張シフトJIS
- 13 文字コード 5C と 7E の文字について
- 14 マイクロソフトが規定するCP932に関連があるコード
- 15 脚注
- 16 関連項目
- 17 外部リンク
CP932の呼称(別名)の整理
- Windows-31J
- Windows 3.1 (J) のリリースに合わせて、マイクロソフトが IBMと日本電気 (NEC) のコードを統合して作った符号化文字集合。1993 年以降、マイクロソフトが自社のドキュメント等で「CP932」という用語を使って表している対象は、常にこの「Windows-31J」である。この名前は IANA に登録されている。
- MS932
- Java で、「IBM のコードページ 932」と「Windows-31J」を区別するための用語。
- CP932
- MS-DOSとWindowsにおける日本語コードページを表す用語。「Windows-31J」が制定されるまでは、OEMベンダによって文字集合が違う。
- MS 漢字コード
- 「CP932」とほぼ同じ意味の用語である。マイクロソフトが(Shift_JIS という符号化方式を)策定したという点や、マイクロソフトが(JIS X 0208という文字集合に対して)文字を独自に追加した点を強調したい場合に用いられる。また、単に「シフト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と同義語。
CP932 の誕生と発展
CP932が、現在の「Windows-31J」の形として完成に至るまでには複雑な経緯がある。
1982年(JIS X 0208-1983策定の前年)、JIS C 6226を複雑にシフトさせた文字符号化方式としてShift_JISが誕生した。この符号化方式(を利用した拡張符号化文字集合)は、マイクロソフトによりMS-DOSにおける標準日本語コードとして採用され、「コードページ 932 (CP932)」という管理番号を与えられた。
ところで、マイクロソフトはMS-DOSにおける唯一の日本語用コードページである、この「CP932」をOEMメーカーの自由に任せていた。そのため、NECのPC-9800 シリーズ、IBMのPS/55 シリーズ、富士通のFMRシリーズなどは全てMS-DOSを搭載しているコンピュータであり、搭載されている文字符号化方式もShift_JISを採用しているにもかかわらず、登録されている文字集合がバラバラだった。
以下、代表的な2つの実装を解説する。
1983年、IBMは、日本語処理に重点を置いたデスクトップコンピュータ「マルチステーション5550」を発売することとなる。このコンピュータで利用する符号化文字集合を以下のように定めた。
- IBMのコードページ932の概要
こうしてできたDBCS-PCは1990年発売のDOS/Vにも引き継がれることとなる。
一方NECは、1983年に PC-9800シリーズの漢字処理オプション提供を開始した。特に、MS-DOSおよびCP/M-86搭載機における漢字ROMに収容する文字集合を以下のように定めた。
- PC-9800仕様OEM コードページ932の概要
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」文字セットを指定できるようになっている。
Windows-31J に重複登録されたコード
前節で触れたように、「Windows-31J」はNECとIBMのそれぞれのコードを統合して(互換性を維持する形で)作られた経緯があるため文字の重複があり、大づかみに言えば「NEC選定IBM拡張文字」と「IBM拡張文字」がほぼまるごと重複している。漢字部分についていえば、すべての漢字がきっかり2つずつ登録されている。
以下、拡張文字を(非符号化)文字集合として詳しく見ると、まずNEC選定IBM拡張は漢字360文字と小文字のローマ数字テンプレート:JIS2004フォント、およびテンプレート:JIS2004フォントで構成されるが、これらはすべてIBM拡張に含まれる。IBM拡張はこのNEC選定IBM拡張に、大文字のローマ数字テンプレート:JIS2004フォントとテンプレート:JIS2004フォントの計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の段階で追加された文字である。
重複文字が含まれる領域
重複文字が含まれる領域は以下の表のとおりである。
文字種名 | コードポイント(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の仕様における優先順位は、以下のようになっている。
- JIS X 0208-1990の登録文字である場合は、これに統一
- 例 : 「√(ルート)」、「∵(なぜならば)」、「¬(否定)」
- 「NEC特殊文字」「IBM拡張文字」が重複する場合は、「NEC特殊文字」に統一
- 例 : 「テンプレート:JIS2004フォント(ナンバー)」 、「テンプレート:JIS2004フォント(かっこかぶ)」、「テンプレート:JIS2004フォント(大文字ローマ数字の3)」
- 「NEC選定IBM拡張文字」「IBM拡張文字」が重複する場合は、「IBM拡張文字」に統一
- 例 : 「テンプレート:JIS2004フォント(たちざき)」 、「テンプレート:CP932フォント(はしごだか)」 、「テンプレート:JIS2004フォント(小文字ローマ数字の 3)」
この基準に従って、Microsoft IME によって、「テンプレート:JIS2004フォント(かっこかぶ)」を入力しようとした場合には、IBM 拡張文字のコードである FA5816進 ではなく、NEC 特殊文字としてのコードである 878A16進 が引き当てられる。
インターネット上での 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拡張文字はもともとベンダの独断で作られた文字セットであるが、これがデファクトスタンダードとしての影響力を持った結果としてテンプレート:要出典現在では各種の公的な規格でも全部または一部が採用されている。
NEC特殊文字
- Windows-31J
- 全83文字を、13区に収録。
- 「≒」「≡」「∫」「√」「⊥」「∠」「∵」「∩」「∪」の9文字は2区にも重複して収録。
- 「∵」の1文字はさらに115区にも重複して収録。
- Unicode
- 83文字全てを基本多言語 (BMP) 面に収録。
- JIS X 0212-1990
- 「№」の1文字を2区81点に収録。
- JIS X 0213:2004
- 「≒」「≡」「∫」「√」「⊥」「∠」「∵」「∩」「∪」の9文字は2区に収録。
- 「テンプレート:CP932フォント (N-ARY SUMMATION)」の1文字は収録されていない。6区18点のギリシャ大文字シグマ「Σ」で代用できるため。
- 上記以外の 73文字はWindows-31Jと同一区点(1 区)上に収録。
IBM拡張文字
- Windows-31J
- 全388文字を、2ないし 3重複して収録。
- Unicode
- 388文字全てを基本多言語面 (BMP) に収録。ただし、テンプレート:CP932フォントなどその一部はCJK互換漢字としての採用であり、統合漢字において別の字体を標準とするコードポイントに包摂されているものである。Unicodeに基づいてこれらの字体を特定的に使用したい場合には、統合漢字のIVSを用いることが推奨されている。
- JIS X 0212-1990
- 全388文字中280文字を収録。
- このうち漢字部分は全360文字中279文字を収録。
- JIS X 0213:2004
- 全388文字中304文字を収録。
- このうち漢字部分は全360文字中276文字を収録。
- 富士通 JEF
- 「テンプレート:CP932フォント」以外の387文字を収録。
- NEC JIPS
- 388文字全てを収録。
- 日立製作所 KEIS (90)
- 「'」「"」以外の386文字を収録。
- IBM DBCS-Host
- 388文字全てを収録。
- 三菱電機 JSII
- 388文字全てを収録。
- 日本ユニシス Lets-J
- 388文字中 328文字を収録。
JIS X 0208以外の公的規格にて登録のあるNEC特殊文字一覧
JIS X 0212-1990に登録されているNEC特殊文字(全部)
JIS X 0213:2004 に登録されているNEC特殊文字(全部)
IBM拡張文字を名前に持つ有名人
太字がIBM拡張文字。下記の名前の文字中、「テンプレート:CP932フォント」は「高」の、「テンプレート:JIS2004フォント」は「崎」の俗字であり、康熙字典に根拠はない。
- [[高村薫|テンプレート:CP932フォント]](日本の小説家)
- [[内田百間|テンプレート:音声ルビ]](日本の小説家) - ちなみに最初の文字はIBM拡張文字ではないが、JIS X 0208では正確に表示できない。「内」の中の部分が康熙字典体に準拠した「入」になっている。
- [[手塚治虫|テンプレート:JIS2004フォント]](日本の漫画家)
- [[徳永英明|テンプレート:JIS2004フォント]](日本のシンガーソングライター)
- [[宮崎あおい|テンプレート:JIS2004フォント]](日本の女優)
- [[草なぎ剛|テンプレート:JIS2004フォント]](日本のタレント)
- [[里見とん|テンプレート:JIS2004フォント]](日本の小説家)
- [[李承ヨプ (野球)|テンプレート:JIS2004フォント]](韓国のプロ野球選手)
- [[鄭ミン台|テンプレート:JIS2004フォント]](韓国のプロ野球選手)
- [[トウ小平|テンプレート:JIS2004フォント]](中国の政治家)
文字コード | テンプレート:CP932フォント | テンプレート:CP932フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント | テンプレート:JIS2004フォント |
---|---|---|---|---|---|---|---|---|---|---|
JIS X 0208-1990 | 高 | 間 | 塚 | 徳 | 崎 | × | × | × | × | × |
JIS X 0212-1990 | - | - | - | - | - | ○ | ○ | ○ | ○ | ○ |
JIS X 0213:2004 | 高 | 間 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Unicode 2.0 - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
表中の漢字表示箇所については、その文字に包摂されている(同じ文字とみなされる)ことを表す。
JIS X 0208以外の公的規格にて登録のあるIBM拡張文字一覧
人名用漢字(2004年改正)に登録されているIBM拡張文字(全部)
JIS X 0212-1990に登録されているIBM拡張文字(全部)
JIS X 0213:2004に登録されている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
アップルコンピュータは自社のコンピュータのOSとしてMS-DOSやCP/M-86を採用しなかったが、Macintoshが用いる文字コードとしてシフトJISを利用した。
そのMacintosh(漢字 Talk 7.1 以降)搭載のシフトJISの9 - 15区にはアップルコンピュータ独自の特殊文字が登録されている。このエリアには13区が含まれるため、Windows-31Jの「NEC特殊文字」領域と被っている。文字の例を挙げれば、NEC特殊文字の「テンプレート:JIS2004フォント」は Apple特殊文字の「テンプレート:JIS2004フォント」が同じコードポイントに登録されている。さらに、117区に「縦書き用文字」が登録されている点も Windows-31J と異なる。IBM拡張文字の領域は存在しない[5]。この文字コードについては、MacJapanese を参照のこと。
漢字Talk 6以前のMacintosh では、NEC互換のシフトJISが使われており、13区のNEC特殊文字もMacintosh上で利用できた。Mac OS X標準ウェブブラウザの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 | テンプレート:Backslash (バックスラッシュ) | ˜ (チルダ) |
JIS X 0201 | ¥ (円記号) | ‾ (オーバーライン) |
Windows-31J | ¥ (円記号) | ˜ (チルダ) |
マイクロソフトが規定するCP932に関連があるコード
Eメールで用いるために7ビットコードで「Windows-31J」の文字集合(=マイクロソフト標準キャラクタセット[6])を表現した「CP50220」や、GR領域にマイクロソフト標準キャラクタセットを表現した「CP51932」というものがある。これらは、マイクロソフトのInternet Explorerや、EmEditor、秀丸エディタなどのWindowsアプリケーションで利用されている。
IE6.0における表記 | マイクロソフトのコードページ | 文字集合と符号化方式 |
---|---|---|
日本語(シフト JIS) | CP932 | マイクロソフト標準キャラクタセットをシフト符号化表現 |
日本語 (JIS) | CP50220 | マイクロソフト標準キャラクタセットをRFC1468符号化表現 |
日本語 (EUC) | CP51932 | マイクロソフト標準キャラクタセットをGR表現[7] |
Unicode | CP1200 | UnicodeをUTF-16 (Little Endian) で符号化 |
Unicode (Big-Endian) | CP1201 | UnicodeをUTF-16 (Big Endian) で符号化 |
Unicode (UTF-8) | CP65001 | UnicodeをUTF-8で符号化 |
脚注
関連項目
外部リンク
- Microsoft Windows Codepage 932
- Microsoft .NET Framework クラスライブラリ Encoding クラス
- Windows-31J情報
- 通信で使って良い文字、悪い文字
- cp932 to Unicode table
- ↑ メインフレームにて搭載されている符号化文字集合。単に「IBM漢字」と呼ばれることも多い。IBM コードページ300という管理番号が割り振られている。日本語カナ版EBCDIC(IBMコードページ290)と組み合わせて IBMコードページ930 として用いられたり、日本語英小文字版EBCDIC(IBMコードページ1027)と組み合わせてIBMコードページ939として用いられることが多い。
- ↑ マイクロソフトおよびIBMは、それぞれ独自に「コードページ###(#は数字)」という形で、符号化文字集合を管理している。また、同じ番号のコードページ同士が同じ文字集合を指しているわけではない。
- ↑ JIPSは、NECが1979年に開発したメインフレーム用の日本語処理システムの名前だが、ここではそのシステムで使われる符号化文字集合を以ってJIPSと呼ぶ。JIPSでは「JIS C 6226-1978」がGLに呼び出され、その9 - 13区に特殊文字が実装され、また、GR領域に「G1集合」と呼ばれる拡張漢字領域が実装されている。
- ↑ NECとしては、JIPSのG1集合を収める方が建前として良かったのかもしれない。しかし、CP/M-86やMS-DOSなどのオペレーティングシステム (OS) 搭載機においては、符号化方式としてシフトJISが前提だった。G1集合部分を収めるには配置制約を大きく受けることになるため断念したものと考えられる。また、漢字ROM容量の都合上、G1集合部分を収めても利用することは不可能だったとも考えられる。
- ↑ マイクロソフトはこのコードに対して、コードページ10001という管理番号を付与している。
- ↑ 本節では、マイクロソフト標準キャラクタセットが JIS X 0208 のコードポイントを拡張する形で表現されているものと仮定した場合の説明を行っている。
- ↑ マイクロソフトは「CP51932」のほかに「CP20932」という EUC-JP に似たコードページを有している。「CP20932」は上位バイト A016進 - FE16進、下位バイト 2016進 - 7E16進 という 2 バイトの組み合わせを利用することで補助漢字を表現する。eucJP-openとの対応においては、「CP51932」よりも「CP20932」の方が、レパートリの一致度が高い。