Template‐ノート:特殊文字に、このページに関する質問があります。(2023年1月)
質問の要約:Template:特殊文字で「Microsoftコードページ932(はしご高)」と書かれている場合があること
この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。Microsoft コードページ 932(マイクロソフト コードページ 932)は(以下 CP932)、マイクロソフト及び、MS-DOSのOEMベンダがShift_JISを独自に拡張した文字コードである。また、同時にCP932は、Shift_JISのWindowsアプリケーションにおける「実装」を指す用語であるとも言える。
この項では、主にShift_JISにおけるマイクロソフトおよび各ベンダの独自拡張部分について言及する。ベンダ独自拡張部分以外の内容については、Shift_JISを参照されたい。
また、マイクロソフト標準キャラクタセットの項目も併せて参照されたい。
CP932の呼称(別名)の整理
Windows-31J
Windows 3.1 (J) のリリースに合わせて、マイクロソフトが IBMと日本電気 (NEC) のコードを統合して作った符号化文字集合。1993 年以降、マイクロソフトが自社のドキュメント等で「CP932」という用語を使って表している対象は、常にこの「Windows-31J」である。この名前は IANA に登録されている。
MS932
Java で、「IBM のコードページ 932」と「Windows-31J」を区別するための用語。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と同義語。
構造この項目では色を扱っています。閲覧環境によっては、色が適切に表示されていない場合があります。.mw-parser-output .hlist ul,.mw-parser-output .hlist ol{padding-left:0}.mw-parser-output .hlist li,.mw-parser-output .hlist dd,.mw-parser-output .hlist dt{margin-right:0;display:inline-block;white-space:nowrap}.mw-parser-output .hlist dt:after,.mw-parser-output .hlist dd:after,.mw-parser-output .hlist li:after{white-space:normal}.mw-parser-output .hlist li:after,.mw-parser-output .hlist dd:after{content:" ・\a0 ";font-weight:bold}.mw-parser-output .hlist dt:after{content:": "}.mw-parser-output .hlist-pipe dd:after,.mw-parser-output .hlist-pipe li:after{content:" |\a0 ";font-weight:normal}.mw-parser-output .hlist-hyphen dd:after,.mw-parser-output .hlist-hyphen li:after{content:" -\a0 ";font-weight:normal}.mw-parser-output .hlist-comma dd:after,.mw-parser-output .hlist-comma li:after{content:"、";font-weight:normal}.mw-parser-output .hlist-slash dd:after,.mw-parser-output .hlist-slash li:after{content:" /\a0 ";font-weight:normal}.mw-parser-output .hlist dd:last-child:after,.mw-parser-output .hlist dt:last-child:after,.mw-parser-output .hlist li:last-child:after{content:none}.mw-parser-output .hlist dd dd:first-child:before,.mw-parser-output .hlist dd dt:first-child:before,.mw-parser-output .hlist dd li:first-child:before,.mw-parser-output .hlist dt dd:first-child:before,.mw-parser-output .hlist dt dt:first-child:before,.mw-parser-output .hlist dt li:first-child:before,.mw-parser-output .hlist li dd:first-child:before,.mw-parser-output .hlist li dt:first-child:before,.mw-parser-output .hlist li li:first-child:before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child:after,.mw-parser-output .hlist dd dt:last-child:after,.mw-parser-output .hlist dd li:last-child:after,.mw-parser-output .hlist dt dd:last-child:after,.mw-parser-output .hlist dt dt:last-child:after,.mw-parser-output .hlist dt li:last-child:after,.mw-parser-output .hlist li dd:last-child:after,.mw-parser-output .hlist li dt:last-child:after,.mw-parser-output .hlist li li:last-child:after{content:")\a0 ";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li:before{content:" "counter(listitem)" ";white-space:nowrap}.mw-parser-output .hlist dd ol>li:first-child:before,.mw-parser-output .hlist dt ol>li:first-child:before,.mw-parser-output .hlist li ol>li:first-child:before{content:" ("counter(listitem)" "}.mw-parser-output .navbar{display:inline;font-size:75%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}.mw-parser-output .infobox .navbar{font-size:88%}.mw-parser-output .navbox .navbar{display:block;font-size:88%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}
表
話
編
歴
第1バイト0123456789ABCDEF
0????????????????
1????????????????
2?!"#$%&'()*+,-./
30123456789:;<=>?
4@ABCDEFGHIJKLMNO
5PQRSTUVWXYZ[\]^_
6`abcdefghijklmno
7pqrstuvwxyz{|}??
8
9
A。「」、・ヲァィゥェォャュョッ
Bーアイウエオカキクケコサシスセソ
Cタチツテトナニヌネノハヒフヘホマ
Dミムメモヤユヨラリルレロワン゙゚
E
F
第2バイト0123456789ABCDEF
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
ASCII制御文字
ASCIIと同一の文字
ASCIIと異なる文字
半角カナ
2バイト文字の第1バイト
2バイト文字の第2バイト(区番号が奇数の場合)
2バイト文字の第2バイト(区番号が偶数の場合)
未使用
Shift_JISでは空き領域や未使用であった13区(874016 - 879E16)、89 - 92区(ED4016 - EEFC16)、115 - 119区(FA4016 - FC9E16)に合計845文字を追加。ただし同じ文字が互換性のため重複して含まれており実質447文字の追加である。また、95 - 114区(F04016 - F9FC16)も利用者定義領域(外字領域)となっている。 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つの実装を解説する。 1983年、IBMは、日本語処理に重点を置いたデスクトップコンピュータ「マルチステーション5550」を発売する際、利用する符号化文字集合を以下のように定めた。 こうしてできたDBCS-PCは1990年発売のDOS/Vにも引き継がれることとなる。 一方NECは、1983年に PC-9800シリーズの漢字処理オプション提供を開始した。特に、MS-DOSおよびCP/M-86搭載機における漢字ROMに収容する文字集合を以下のように定めた。 マイクロソフトは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」はNECとIBMのそれぞれのコードを統合して(互換性を維持する形で)作られた経緯があるため文字の重複があり、大まかに言えば「NEC選定IBM拡張文字」と「IBM拡張文字」がほぼまるごと重複している。漢字部分についていえば、すべての漢字がきっかり2つずつ登録されている。 以下、拡張文字を(非符号化)文字集合として詳しく見ると、まずNEC選定IBM拡張は漢字360文字と小文字のローマ数字.mw-parser-output .jis2004font{font-family:"源ノ角ゴシック JP Normal","源ノ角ゴシック JP","Source Han Sans Normal","Source Han Sans","NotoSansJP-DemiLight","Noto Sans CJK JP DemiLight","ヒラギノ角ゴ ProN W3","ヒラギノ角ゴ ProN","Hiragino Kaku Gothic ProN","メイリオ",Meiryo,"新ゴ Pr6N R","A-OTF 新ゴ Pr6N R","小塚ゴシック Pr6N M","IPAexゴシック","Takaoゴシック","XANO明朝U32","XANO明朝","和田研中丸ゴシック2004絵文字","和田研中丸ゴシック2004ARIB","和田研中丸ゴシック2004P4","和田研細丸ゴシック2004絵文字","和田研細丸ゴシック2004ARIB","和田研細丸ゴシック2004P4","和田研細丸ゴシックProN",YOzFont04,"IPA Pゴシック","Yu Gothic UI","Meiryo UI","MS Pゴシック";font-feature-settings:"jp04"1}「@」‐「I」、および「¬」「U」「V」「W」で構成されるが、これらはすべてIBM拡張に含まれる。IBM拡張はこのNEC選定IBM拡張に、大文字のローマ数字「T」‐「]」と「梶v「av「пv「∵」の計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文字) @ABCDEFGHIUVW TUVWXYZ[\]gх61文字 @ABCDEFGHIJKLMNOPQRS_`abcdefghijklmnopqrstu~∞ョ援窮欠合紫順島這 重複文字が含まれる領域は以下の表のとおりである。 文字種名コードポイント(16進数表記)区番号重複文字数 文字コード変換を行う際には、この重複文字というのは厄介になる。別の文字コードから、「Windows-31J」に変換する場合に、重複するどちらの文字へと変換するべきかが問題になる。 それに関して、WindowsのAPIの仕様における優先順位は、以下のようになっている。
歴史
CP932 の誕生と発展
IBM
Shift_JISをベースとする。
JIS C 6226が規定する94区 × 94点の領域に拡張文字追加を行なわない。
95 - 114区をユーザ外字領域とする。
115 - 119区にJIS C 6226に非登録のDBCS-Host[1]文字を登録することで、DBCS-Hostの文字セット全体を表現する。
2バイト文字部分だけの符号化文字集合の名称をDBCS-PCとし、コードページ番号[2]として「301」を割り当てる。
1バイト・2バイト文字全体の符号化文字集合のコードページ番号として「932」を割り当てる。
NEC PC-9800
Shift_JISをベースとする。
JIPS[3]の9 - 13区の特殊文字領域をそのままの区点番号で配置。
JIS C 6226-1978 非漢字・第一水準漢字・第二水準漢字はそのままの字形で、そのままの区点番号に配置。
IBM のメインフレームの「IBM 漢字 (DBCS-Host)」の中でJIS C 6226に登録の無い漢字をIBMのDBCS-PCと同様の並びで89 - 92区に配置[4]。DBCS-PCと違い、115 - 119区ではなく、GL表現も可能なように追加文字全てを 94区内に全て配置した。
OEMコードページの統合
マイクロソフトによるIBM & NEC統合の概要
ベースとなる符号化文字集合としてJIS X 0208-1990を採用。
NECが9 - 13区に登録していた特殊文字の内、13区のものだけを継承。この 13区登録の 83文字のことを「NEC特殊文字」と命名。
NECが89 - 92区に登録していた漢字と非漢字は全て継承。このエリアの374文字のことを「NEC選定IBM拡張文字」と命名。
IBMが115 - 119区に登録していた漢字と非漢字も全て継承。このエリアの388文字のことを「IBM拡張文字」と命名。
Windows-31J に重複登録されたコード
表
話
編
歴
NEC選定IBM拡張文字(374文字)NEC特殊文字(83文字)
373文字
\]^_`abcdefghijklmnopqrstuvwxyz{|}~淫戒期釧厚匙囚嘱穿凧諦日琵放愈簾傅哄奧將ヒ曉檄滯。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラ晴ルレロワン゙゚朗磅糶脣蕣褝踰鋺顫鴾@ABCDEFGHIJKLMNOPQRSTUVW?YZ[\]猪_`abcdefghijklmnopqrst益vwxyz{|礼神祥&漲靖精棋屑口冊収埴箭痩H乳眉方油練傴哈奬廐戔暾?。「」、・ヲァィ諸ェォャュョッーアイウ逸オカ都クケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚瓔磊糺脯蕘襠踴鍄阯イ飯飼館@ABCDEFGH鶴JK13文字
1文字
¬1文字
∵8文字
≒≡∫√⊥∠∩∪
6869文字
(省略)
JIS X 0208:1990(6879文字)
重複文字が含まれる領域
JIS X 0208の非漢字(1983年追加文字)の一部-2区10文字
NEC特殊文字8740 - 879C13区22文字
NEC選定IBM拡張文字ED40 - EEFC89 - 92区374文字(全部)
IBM拡張文字FA40 - FC4B115 - 119区388文字(全部)
文字コード変換時の重複文字の影響
JIS X 0208-1990の登録文字である場合は、これに統一
例 : 「√(ルート)」、「∵(なぜならば)」、「¬(否定)」
Size:61 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef