Windowsコードページは、 1980年代から1990年代にかけてMicrosoft Windowsで使用されていた文字セット、またはコードページ(他のオペレーティングシステムでは文字エンコーディングと呼ばれる)です。Windowsコードページは、 WindowsにUnicodeが実装されるにつれて徐々に置き換えられましたが、 Windows内および他のプラットフォームでは現在もサポートされており、 Altコードショートカットを使用する場合にも適用されます。
現在のWindowsバージョンはUnicodeをサポートしており、新しいWindowsアプリケーションは8ビット文字エンコーディングではなくUnicode(UTF-8)を使用する必要があります。[ 1 ]
Windows システムには、OEM コード ページと Windows ネイティブ (ANSI) コード ページという 2 つのシステム コード ページ グループがあります。(ANSI は米国規格協会です。) これらのグループのコード ページはどちらも拡張 ASCIIコード ページです。追加のコード ページは標準の Windows 変換ルーチンでサポートされていますが、どちらのタイプのシステム コード ページとしても使用されません。
ANSI コードページ( Microsoft が以前の用語が不適切であることを認めた後、正式には「Windows コードページ」[ 2 ]と呼ばれています[ 3 ] ) は、Windows システムでグラフィカル ユーザー インターフェイスを使用するネイティブの非 Unicode (バイト指向) アプリケーションで使用されます。 「ANSI」という用語は、これらの Windows コードページがANSI (米国規格協会) の標準に準拠していないため、不適切です。コード ページ 1252 は、国際標準ISO 8859-1 [ 3 ]となった初期の ANSI ドラフトに基づいており、さらに32 の制御コードと 96 個の印刷可能な文字のためのスペースが追加されています。その他の違いとして、Windows コードページでは印刷可能な文字が補助的な制御コード スペースに割り当てられているため、標準に準拠したオペレーティングシステムではせいぜい判読不能になります。[ a ]
ほとんどの従来の「ANSI」コードページは、 125xのパターンでコードページ番号が付けられています。ただし、874 (タイ語) および東アジアのマルチバイト「ANSI」コードページ ( 932、936、949、950 ) は、すべて OEM コードページとしても使用されていますが、IBM エンコーディングに合わせて番号が付けられており、Windows エンコーディングと同一のものは存在しません (ただし、ほとんどは類似しています)。コードページ 1258 も OEM コードページとして使用されていますが、これは既存のエンコーディングの拡張ではなく、Microsoft 独自のものです。IBM は、Microsoft のバリアントに対して独自の異なる番号を割り当てており、該当する場合は以下のリストで参照用に示しています。
125x のすべての Windows コード ページ、および 874 と 936 は、インターネット割り当て番号機関(IANA) によって「Windows-番号」とラベル付けされていますが、「Windows-936」は「 GBK 」の同義語として扱われます。Windows コード ページ 932 は代わりに「Windows-31J」とラベル付けされています。[ 4 ]
ANSI Windows コード ページ、特にコード ページ1252 は、ANSI に提出または意図されたドラフトに基づいているとされているため、そのように呼ばれています。しかし、ANSI とISO はこれらのコード ページを標準化していません。代わりに、それらは次のいずれかです。[ 3 ]
Microsoft は、CP1252 の約 12 個の活字およびビジネス文字 (特にユーロ記号€ を含む) を、ISO 8859でC1 制御コードに割り当てられているコード ポイント0x80~0x9F に割り当てました。これらの割り当ては、同じコード ポイントの他の多くの ANSI/Windows コード ページにも存在します。Windows は C1 制御コードを使用していなかったため、この決定は Windows ユーザーに直接的な影響はありませんでした。しかし、Unix や MacOS などの標準準拠プラットフォームに転送されたファイルに含まれている場合、この情報は目に見えず、混乱を招く可能性がありました。[ a ]
OEMコードページ(Original Equipment Manufacturer:オリジナル機器メーカー)は、 Win32コンソールアプリケーションや仮想DOSで使用され、 DOSやオリジナルのIBM PCアーキテクチャからの名残とみなすことができます。別のコードページ群が実装されたのは、互換性のためだけでなく、VGA(および後継)ハードウェアのフォントが、線画文字のエンコードをコードページ437と互換性を持たせることを示唆していたためです。ほとんどのOEMコードページは、特に非文字に関して、CP437の後半(非ASCII)部分と多くのコードポイントを共有しています。
一般的な OEM コード ページの後半部分は、ANSI/Windows コード ページに大まかに似ても似つかない。しかしながら、2 つのシングル バイト固定幅コード ページ (タイ語の場合は 874 、ベトナム語の場合は 1258 ) と 4 つのマルチ バイトCJKコード ページ ( 932、936、949、950 ) は、OEM コード ページと ANSI コード ページの両方として使用される。コード ページ 1258 は結合ダイアクリティカルマークを使用する。これは、ベトナム語では 128 を超える文字とダイアクリティカルマークの組み合わせが必要となるためである。これは、一部のC0 (つまり ASCII) 制御コードを置き換えるVISCIIとは対照的である。
初期のコンピュータシステムは記憶容量が限られており、文字をエンコードするために使用できるビット数も制限されていました。初期の独自エンコーディングではビット数が少なかったものの、米国情報交換標準コード(ASCII)は7ビットに落ち着きました。これは、米国で使用される96種類の文字のサブセットをエンコードするのに十分でした。8ビットバイトが主流になると、マイクロソフト(および他の企業)は、ボックス描画記号など、さまざまな用途に対応するために、文字数を224種類に拡張しました。西ヨーロッパおよび南米市場向けに合成文字を提供する必要性から、異なる文字セットが必要となり、マイクロソフトはアルファベットごとに1つのコードページという原則を確立しました。アフリカ、南北アメリカ、南アジアおよび東南アジア、中東、ヨーロッパのほとんどで使用される分節文字では、1文字に1バイトしか必要ありませんが、世界のその他の地域で使用される表意文字では2バイト以上が必要です。コードページモデルでは、この課題に対応できませんでした。
1990年代後半以降、ソフトウェアやシステムはUnicodeを優先的な文字コード形式として採用してきました。Unicodeは数百万文字を処理できるように設計されています。現在、すべてのMicrosoft製品およびアプリケーションプログラミングインターフェースは内部的にUnicodeを使用していますが、一部のアプリケーションは、テキストデータをファイルや標準出力に読み書きする際に、コンピュータの「ロケール」のデフォルトエンコーディングを引き続き使用しています。そのため、世界のある地域では判読可能で理解しやすいファイルでも、別の地域では判読不能な文字化けになってしまう場合があります。
Microsoft は、Windows NT 以降、すべてのオペレーティングシステムでUnicode エンコーディング (最初は、当時 Unicode の唯一のエンコーディングであった、現在は廃止されたUCS-2 )、つまりUTF-16 を採用しましたが、 Windows 10 バージョン 1803以降ではUTF-8 (別名)もサポートしています。[ 5 ] UTF-16 と UCS-2 は、理論的には、基本多言語面(BMP)のすべての Unicode コード ポイントを単一の 16 ビット コード ポイントでエンコードできますが、残りの Unicode (絵文字や一部の中国語など) はより多くのバイトを必要とし、BMP 内にある é のような文字でさえ、UTF-8 と UTF-16 の両方で複数のコード ポイントを必要とする表現があります。UCS-2 は単一のコード ポイント エンコーディングであるため、bmp 内のコード ポイントのみを使用するすべての文字 (例 ā́ は複数のコード ポイントを使用するため、UCS-2 では表現できません) を表現することさえできませんでした。UCS-2 から UTF-16 への移行により、唯一の利点は失われましたが、すべての Unicode を表現する能力を獲得しました。業界の他の部分(Unix系システムやウェブ)も、そして今ではマイクロソフトもUTF-8(7ビットASCII文字セットと互換性がある)を選択している。CP_UTF8
以下のWindowsコードページが存在します。
これら 9 つのコード ページはすべて拡張 ASCII 8 ビットSBCSエンコーディングであり、MicrosoftがWindows の ANSI コード ページとして使用するために設計しました。これらは一般的に IANA に登録された[ 6 ]名で知られていますが、時には「cp」(コード ページ)とも呼ばれます。これらはすべて ANSI コード ページとして使用され、Windows-1258 は OEM コード ページとしても使用されます。windows-<number>cp<number>
Windows-125xシリーズには、ANSIコードページが9つ含まれており、主にヨーロッパと西アジアの文字体系をカバーしていますが、ベトナム語も追加されています。タイ語と東アジア言語のシステムエンコーディングは、IBMの類似コードページに合わせて番号が付けられており、ANSIコードページとOEMコードページの両方として使用されています。これらについては、以降のセクションで説明します。
これらもASCIIベースです。これらのほとんどはOEMコードページとして使用するために含まれています。コードページ874はANSIコードページとしても使用されます。
これらは多くの場合、同じ番号の IBM コード ページとは異なります。コード ページ 932、949、950 は、同じ番号の IBM コード ページと部分的にしか一致しません。一方、番号 936 は、現在非推奨となっている別の簡体字中国語エンコーディングに IBM によって使用されていました。また、Windows-951 は、暫定的な措置として作成されたもので、IBM-951 とは無関係です。IBM の同等のコード ページは、2 列目に示されています。コード ページ 932、936、949、950/951 は、該当するロケールで ANSI コード ページと OEM コード ページの両方として使用されます。

オペレーティングシステムライブラリを使用したデコードまたはエンコードのために、さらにいくつかのマルチバイトコードページがサポートされていますが、どのロケールにおいても、システムエンコーディングとして使用されることはありません。
マイクロソフトは最新のアプリケーションではUnicodeの使用を強く推奨していますが、多くのアプリケーションやデータファイルは依然として従来のコードページに依存しています。
コード ページを示すために使用される「ANSI」という用語は歴史的な参照ですが、現在では Windows コミュニティで依然として使用されている誤称です。これは、Windows コード ページ 1252 が元々 ANSI ドラフトに基づいており、それが国際標準化機構 (ISO) 規格 8859-1 になったという事実に由来します。「ANSI アプリケーション」は通常、Unicode またはコード ページ ベースではないアプリケーションを指します。