Microsoft Windows コード ページ 932 (略称MS932 [ 2 ] [ 3 ] Windows-932 [ 3 ]または曖昧にCP932 [ 4 ]とも呼ばれる) は、Windows-31J などとも呼ばれ(下記の§ 用語を参照)、日本語用のMicrosoft Windowsコード ページであり、 Shift JIS日本語文字エンコーディングの拡張バリアントです。標準の 7 ビットASCIIコードが含まれており、日本語文字は最初のバイトの最上位ビットが 1 に設定されることで示されます。このページの一部のコード ポイントでは 2 バイト目が必要となるため、文字はエンコードに 8 ビットまたは 16 ビットのいずれかを使用します。
IBM は、コード ページ943 ( IBM-943またはCP943 ) [ 5 ]で同じ拡張ダブル バイト コードを提供しています。これは、シングル バイトのコード ページ 897とダブル バイトのコード ページ 941 [ 6 ]の組み合わせです。
Windows-31J は、ウェブ上で最もよく使われている非UTF-8 / Unicode 日本語エンコーディングです。しかし、Microsoft ライブラリ[ 7 ]を含む多くの人やソフトウェア パッケージは、Windows-31J データに対してShift JISエンコーディングを宣言していますが、これにはいくつかの追加文字が含まれており、既存の文字の一部はUnicodeshift_jisに異なる方法でマッピングされています。このため、WHATWG HTML 標準ではエンコーディング ラベルを互換的に扱いwindows-31j、その「Shift_JIS」エンコーダとデコーダには Windows バリアントを使用しています。[ 1 ]
Microsoft の Shift JIS バリアントは、Microsoft Windows 上では単に「コード ページ 932」として知られていますが、これは曖昧です。IBMのコード ページ 932も Shift JIS バリアントですが、Microsoft のバリアントに存在する NEC および NEC が選択した 2 バイトのベンダー拡張機能がなく (ただし、どちらも IBM 拡張機能は含まれています)、1978 年の JIS X 0208 の順序が維持されています。[ 5 ]
IBMのコードページ943(または「IBM-943」)には、Windowsのコードページ932と同じ2バイトコードが含まれています。[ 5 ] Microsoftのバージョンは、International Components for Unicode (ICU)でibm-943_P15A-2003 (別名CP943CおよびWindows-932を含む)[ 3 ]と呼ばれるエンコーディングとほぼ一致しています。また、IBMのコードページ定義により近い異なる1バイトマッピングを使用するibm-943_P130-1999 [ 8 ]という2つ目のICUエンコーディングもあります。(詳細は、下記の§1バイト文字の違いを参照してください。)
Windows コード ページ 932 は、IANAにWindows-31Jとして登録されています。[ 9 ]「Windows-31J」ラベルは IANA のものであり、Microsoft では認識されていません。Microsoft はこれまで代わりに「shift_jis」を使用してきました。[ 7 ] HTML5で使用される W3C / WHATWG エンコーディング標準では、「展開されたコンテンツとの互換性」 [ 10 ]を目的として、「 shift_jis 」ラベルを「windows-31j」と互換的に扱い、Windows コード ページ 932 [ 1 ] (IBM および NEC の以前の独自拡張機能を含む) と一致します。[ 11 ]
Windows コード ページ 932 はMS_Kanjiとも呼ばれますが、[ 3 ] [ 12 ] IANA は MS_Kanji を標準 Shift JIS の別名として扱います。[ 9 ] 例えばPython はMS-Kanji、Windows-932 にはラベル(またはcp932) を、JIS X 0208 で定義された Shift JIS にはラベルShift_JIS(またはsjis) を使用しますが、ラベルは認識しませんWindows-31J。[ 12 ]
日本語版Windowsでは、このコードページは「ANSI」と呼ばれています。これは、 ANSIがその定義に関与していなかったにもかかわらず、オペレーティングシステムのデフォルトの8ビットエンコーディングであるためです。
Windows-31J は、標準の Shift JIS ( JIS X 0208 :1997 付録 1で定義) とよく間違えられますが、似ているものの、文字化けを避けたいコンピュータ プログラマにとっては重要な違いがあります。

Windows-31J は、標準のJIS X 0201 :1997 およびJIS X 0208 :1997 文字に加えて、いくつかの JIS X 0208 拡張機能、すなわち「NEC 特殊文字(13 行目)、IBM 拡張機能の NEC 選択 (89 ~ 92 行目)、および IBM 拡張機能 (115 ~ 119 行目)」[ 9 ]を含み、さらにエンド ユーザー定義用にエンコード領域を確保しています。[ 13 ]これは、NEC 拡張機能や NEC 選択を含まないIBM-932とも異なります。 [ 5 ]
IBM 拡張機能は、当初 JIS X 0208 に存在しなかったIBM 日本語 DBCS-Hostレパートリーの文字をエンコードするように設計されました。 「because」記号∵ と「not」記号¬ は、後に 1983 年に JIS X 0208 自体に追加され、Microsoft は、1983 年の場所にも拡張場所にこれらを含めています。[ 14 ] NEC 拡張機能も IBM レパートリー全体をエンコードしますが、JIS X 0208 の範囲を超える Shift JIS コードを使用するのではなく、94×94 JIS X 0208 グリッド内の別の拡張機能 ( NEC 行 13に既に含まれている文字の他に、行 89~92 ) にエンコードします。Windows コード ページ 932 には、これらの 388 文字が両方の場所に含まれています。[ 14 ]その結果、「because」記号と「not」記号は 3 回エンコードされます。
これらの表現の一部は、その後、JIS X 0213およびShift JIS-2004でさまざまな文字に使用されました。たとえば、JIS X 0213 の 89 行目 (硃、硎、硏... で始まる) [ 15 ]と、IBM/NEC 拡張機能付きの JIS X 0208 で使用されている 89 行目 (纊、褜、鍈... で始まる) [ 16 ]を比較してください。したがって、Shift JIS-2004 は Windows-31J と互換性がありません。
上記に加えて、Microsoft は、標準の Shift JIS と比較して、いくつかの 2 バイト句読点文字に対して異なる (ただし視覚的に類似した) Unicode マッピングを使用しています。たとえば、波ダッシュはU+301C ではなくU+FF5E にマッピングされています[ 17 ]。これは ibm-943_P15A-2003 [ 18 ]に続きますが、ibm-943_P130-1999 [ 19 ]には続きません。また、2 バイトのバックスラッシュには異なるマッピングを使用しています[ 17 ] 。
Windows-932には、最上位ビットが 0 に設定された 1 バイト シーケンス用の標準 7 ビットASCIIマッピングが含まれています。したがって、コード 0x5C と 0x7E は、ASCII ( ISO-646 -US )と同様に、それぞれU+005C REVERSE SOLIDUS ( \、バックスラッシュ) と U+007E TILDE ( ) として Unicode にマッピングされます。 [ 20 ] [ 21 ] [ 17 ]これは、W3C/WHATWG エンコーディング標準でも同様に行われます。[ 22 ]対照的に、0x5C はISO-646-JPのU+00A5 YEN SIGN ( )にマッピングされ、結果としてJIS X 0201にマッピングされます。標準Shift JISはその拡張です。同様に、Windows-31J は、2 バイト 0x815F を U+FF3C FULLWIDTH REVERSE SOLIDUS にマッピングすることでバックスラッシュの重複エンコードを回避していますが、標準の Shift JIS では U+005C にマッピングされます。[ 17 ]~¥
しかし、Windows-932 の 0x5C は、特定のコンテキストでは円記号とみなされます。[ 23 ]このため、多くの日本語フォントでは、Unicode の推奨レンダリングに従ってバックスラッシュではなく、通常は U+00A5 で表される円記号として U+005C が表示されます。U+00A5 は、Windows-932 の 0x5C に一方向で最適にマッピングされます。ただし、Windows-932 のコード 0x5C は、一部のフォントでの表示方法を除き、あらゆる点で (たとえば Windows システムのファイル パスで) 逆スラッシュ (バックスラッシュ) として動作します。 [ 23 ]また、Windows-932 の Microsoft のドキュメントでは、0x5C をバックスラッシュとして表示しています。[ 21 ]このマッピング[ 20 ]は、いくつかのC0 制御文字のわずかな順序変更を除いて、 International Components for Unicode (ICU) [ 3 ]の "ibm-943_P15A-2003" という名前のエンコーディングに対応しています。
IBM-943はIBM-932と同様に[ 5 ]シングルバイトのコード ページ 897 [ 6 ]のスーパーセットであり、0x5C を円記号 ( ¥) に、0x7E をオーバーライン ( ‾)にマッピングします[ 24 ]。これに続いて、ICU では "ibm-943_P130-1999" という名前のエンコーディングが続きます[ 8 ] 。コード ページ 897 (したがって IBM-943 および IBM-932 も同様) では、特定のC0 制御文字を置き換えるシングルバイトのボックス描画文字も追加されます[ 24 ]。ただし、これらはコンテキストによっては制御文字として扱われる場合があり[ 25 ]、ICU では制御文字にマッピングされます[ 8 ] 。
バイトが ASCII バイトまたは 0x80 の場合、値がバイトであるコード ポイントを返します。