Windows code pages are sets of characters or code pages (known as character encodings in other operating systems) used in Microsoft Windows from the 1980s and 1990s. Windows code pages were gradually superseded when Unicode was implemented in Windows, although they are still supported both within Windows and other platforms.
There are two groups of code pages in Windows systems: OEM and ANSI code pages. Code pages in both of these groups are extended ASCII code pages.
|Standard||WHATWG Encoding Standard|
|Preceded by||ISO 8859|
UTF-16 (in Win32 API)
ANSI code pages (officially called "Windows code pages" after Microsoft accepted the former term being a misnomer) are used for native non-Unicode (say, byte oriented) applications using a graphical user interface on Windows systems. ANSI is a bit of a misnomer as the behavior does not exactly match the ANSI standards and other codepages can be selected, most recently UTF-8 Unicode.
Most legacy "ANSI" code pages have code page numbers in the pattern 125x. However, 874 (Thai) and the East Asian multi-byte "ANSI" code pages (932, 936, 949, 950), all of which are also used as OEM code pages, are numbered to match similar (but not identical) IBM encodings. While code page 1258 is also used as an OEM code page, it is original to Microsoft rather than an extension to an existing encoding. IBM have assigned their own, different numbers for Microsoft's variants, these are given for reference in the lists below where applicable.
All of the 125x Windows code pages, as well as 874 and 936, are labelled by Internet Assigned Numbers Authority (IANA) as "Windows-number", although "Windows-936" is treated as a synonym for "GBK". Windows code page 932 is instead labelled as "Windows-31J".
ANSI Windows code pages, and especially the code page 1252, were so-called since they were purportedly based on drafts submitted or intended for ANSI. However, ANSI and ISO have not standardized any of these code pages. Instead they are either:
About twelve of the typography and business characters from CP1252 at code points 0x80–0x9F (in ISO 8859 occupied by C1 control codes, which are useless in Windows) are present in many other ANSI/Windows code pages at the same codes.
The OEM code pages (original equipment manufacturer) are used by Win32 console applications, and by virtual DOS, and can be considered a holdover from DOS and the original IBM PC architecture. A separate suite of code pages was implemented not only due to compatibility, but also because the fonts of VGA (and descendant) hardware suggest encoding of line drawing characters to be compatible with code page 437. Most OEM code pages share many code points, particularly for non-letter characters, with the second (non-ASCII) half of CP437.
A typical OEM code page, in its second half, does not resemble any ANSI/Windows code page even roughly. Nevertheless, two single-byte, fixed-width code pages (874 for Thai and 1258 for Vietnamese) and four multibyte CJK code pages (932, 936, 949, 950) are used as both OEM and ANSI code pages. Code page 1258 uses combining diacritics, as Vietnamese requires more than 128 letter-diacritic combinations. This is in contrast to VISCII, which replaces some of the C0 (i.e. ASCII) control codes.
Initially, computer systems and system programming languages did not make a distinction between characters and bytes. This led to much confusion subsequently. Microsoft software and systems previous to the Windows NT line are examples of this, using the OEM and ANSI code pages, which do not make the distinction.
Since the late 1990s, software and systems are increasingly adopting more direct encodings of Unicode, in particular UTF-8 and UTF-16; this trend has been improved by the widespread adoption of XML, which provides a more adequate mechanism for labelling the encoding used. Recent Microsoft products and application program interfaces use Unicode internally, but many applications and APIs continue to use the default encoding of the computer's locale when reading and writing text data to files or standard output. Therefore, though Unicode is the accepted standard, there is still backwards compatibility with the older Windows code pages.
The euro sign was introduced after many of the ANSI and OEM code pages were introduced; several code pages were revised to contain the euro sign.
The following Windows code pages exist:
These nine code pages are all extended ASCII 8-bit SBCS encodings, and were designed by Microsoft for use as ANSI codepages on Windows. They are commonly known by their IANA-registered names as
windows-<number>, but are also sometimes called
cp<number>, "cp" for "code page". They are all used as ANSI code pages; Windows-1258 is also used as an OEM code page.
|ID||Description||Relationship to ISO 8859 or other established encodings|
|1250||Latin 2 / Central European||Similar to ISO-8859-2 but moves several characters, including multiple letters.|
|1251||Cyrillic||Incompatible with both ISO-8859-5 and KOI-8.|
|1252||Latin 1 / Western European||Superset of ISO-8859-1 (without C1 controls). Letter repertoire accordingly similar to CP850.|
|1253||Greek||Similar to ISO 8859-7 but moves several characters, including a letter.|
|1254||Turkish||Superset of ISO 8859-9 (without C1 controls).|
|1255||Hebrew||Almost a superset of ISO 8859-8, but with two incompatible punctuation changes.|
|1256||Arabic||Not compatible with ISO 8859-6; rather, OEM Code page 708 is a ISO 8859-6 (ASMO 708) superset.|
|1257||Baltic||Not ISO 8859-4; the later ISO 8859-13 is closely related, but with some differences in available punctuation.|
|1258||Vietnamese (also OEM)||Not related to VSCII or VISCII, uses fewer base characters with combining diacritics.|
These are also ASCII-based. Most of these are included for use as OEM code pages; code page 874 is also used as an ANSI code page.
These often only partly match the IBM code pages of the same number: code pages 932, 936 and 949 differ from the IBM code pages of the same number, whereas Windows-951, as part of a kludge, is unrelated to IBM-951. IBM equivalent code pages are given in the second column. Code pages 932, 936, 949 and 950/951 are used as both ANSI and OEM code pages on the locales in question.
|932||943||Japanese||Shift_JIS (Microsoft variant)||ANSI/OEM (Japan)|
|936||1386||Chinese (simplified)||GBK||ANSI/OEM (PRC, Singapore)|
|949||1363||Korean||Unified Hangul Code||ANSI/OEM (Republic of Korea)|
|950||950 (no €), 1370||Chinese (traditional)||Big5 (Microsoft variant)||ANSI/OEM (Taiwan, Hong Kong)|
|951||5471||Chinese (traditional)||Big5-HKSCS (2001 ed.)||ANSI/OEM (Hong Kong, 98/NT4/2000/XP with HKSCS patch)|
A few further multiple-byte code pages are supported for decoding or encoding using operating system libraries, but not used as either sort of system encoding in any locale.
|1361||-||Korean||Johab (KS C 5601-1992 annex 3)||Conversion|
|20000||964||Chinese (traditional)||CNS 11643||Conversion|
|20002||-||Chinese (traditional)||Big5 (ETEN variant)||Conversion|
|20003||?||Chinese (traditional)||IBM 5500||Conversion|
Microsoft strongly recommends using Unicode in modern applications, but many applications or data files still depend on the legacy code pages.