OEM character set
   HOME

TheInfoList



OR:

Windows code pages are sets of characters or
code pages In computing, a code page is a character encoding and as such it is a specific association of a set of printable characters and control characters with unique numbers. Typically each number represents the binary value in a single byte. (In some c ...
(known as
character encoding Character encoding is the process of assigning numbers to Graphics, graphical character (computing), characters, especially the written characters of Language, human language, allowing them to be Data storage, stored, Data communication, transmi ...
s 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, and still apply when Alt code shortcuts are used. There are two groups of system code pages in Windows systems: OEM and Windows-native ("ANSI") code pages. (ANSI is the American National Standards Institute.) Code pages in both of these groups are extended ASCII code pages. Additional code pages are supported by standard Windows conversion routines, but not used as either type of system code page.


ANSI code page

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 The GUI ( "UI" by itself is still usually pronounced . or ), graphical user interface, is a form of user interface that allows users to interact with electronic devices through graphical icons and audio indicator such as primary notation, inst ...
on Windows systems. The term "ANSI" is a misnomer because these Windows code pages do not comply with any ANSI (American National Standards Institute) standard;
code page 1252 Windows-1252 or CP-1252 ( code page 1252) is a single-byte character encoding of the Latin alphabet, used by default in the legacy components of Microsoft Windows for English and many European languages including Spanish, French, and German. I ...
was based on an early ANSI draft that became the international standard ISO 8859-1, which adds a further 32 control codes and space for 96 printable characters. Among other differences, Windows code-pages allocate printable characters to the supplementary control code space, making them at best illegible to standards-compliant operating systems.) Most legacy "ANSI" code pages have code page numbers in the pattern 125x. However,
874 __FORCETOC__ Year 874 ( DCCCLXXIV) was a common year starting on Friday (link will display the full calendar) of the Julian calendar. Events By place Europe * Salomon, duke ('king') of Brittany, is murdered by a faction which includ ...
(Thai) and the East Asian multi-byte "ANSI" code pages (
932 Year 932 ( CMXXXII) was a leap year starting on Sunday (link will display the full calendar) of the Julian calendar. Events By place Europe * Summer – Alberic II leads an uprising at Rome against his stepfather Hugh of Provence ...
,
936 Year 936 ( CMXXXVI) was a leap year starting on Friday (link will display the full calendar) of the Julian calendar. Events By place Europe * June 19 – At Laon, Louis IV, the 14-year old son of the late King Charles the Simp ...
,
949 Year 949 ( CMXLIX) was a common year starting on Monday (link will display the full calendar) of the Julian calendar. Events By place Byzantine Empire * Arab-Byzantine War: Hamdanid forces under Sayf al-Dawla raid into the theme of Ly ...
,
950 Year 950 ( CML) was a common year starting on Tuesday (link will display the full calendar) of the Julian calendar. Events By place Byzantine Empire * Arab–Byzantine War: A Hamdanid army (30,000 men) led by Sayf al-Dawla raids int ...
), all of which are also used as OEM code pages, are numbered to match IBM encodings, none of which are identical to the Windows encodings (although most are similar). 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 The Internet Assigned Numbers Authority (IANA) is a standards organization that oversees global IP address allocation, autonomous system number allocation, root zone management in the Domain Name System (DNS), media types, and other Inte ...
(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 Year 1252 ( MCCLII) was a leap year starting on Monday (link will display the full calendar) of the Julian calendar. Events By place Europe * April 6 – Saint Peter of Verona is assassinated by Carino of Balsamo. * May 15 – P ...
, were so called since they were purportedly based on drafts submitted or intended for ANSI. However, ANSI and
ISO ISO is the most common abbreviation for the International Organization for Standardization. ISO or Iso may also refer to: Business and finance * Iso (supermarket), a chain of Danish supermarkets incorporated into the SuperBest chain in 2007 * Iso ...
have not standardized any of these code pages. Instead they are either: * Supersets of the standard sets such as those of
ISO 8859 ISO/IEC 8859 is a joint ISO and IEC series of standards for 8-bit character encodings. The series of standards consists of numbered parts, such as ISO/IEC 8859-1, ISO/IEC 8859-2, etc. There are 15 parts, excluding the abandoned ISO/IEC 8859-12. ...
and the various national standards (like
Windows-1252 Windows-1252 or CP-1252 ( code page 1252) is a single-byte character encoding of the Latin alphabet, used by default in the legacy components of Microsoft Windows for English and many European languages including Spanish, French, and German. I ...
vs. ISO-8859-1), * Major modifications of these (making them incompatible to various degrees, like
Windows-1250 Windows-1250 is a code page used under Microsoft Windows to represent texts in Central European and Eastern European languages that use Latin script, such as Czech (which is its main user with half its use, though Czech has 96.6% use of UTF-8, an ...
vs.
ISO-8859-2 ISO/IEC 8859-2:1999, ''Information technology — 8-bit single-byte coded graphic character sets — Part 2: Latin alphabet No. 2'', is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1987. I ...
) * Having no parallel encoding (like
Windows-1257 Windows-1257 (Windows Baltic) is an 8-bit, single-byte extended ASCII code page used to support the Estonian, Latvian and Lithuanian languages under Microsoft Windows. In Lithuania, it is standardised as LST 1590-3, alongside a modified variant ...
vs.
ISO-8859-4 ISO/IEC 8859-4:1998, ''Information technology — 8-bit single-byte coded graphic character sets — Part 4: Latin alphabet No. 4'', is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1988. I ...
; ISO-8859-13 was introduced much later). Also, Windows-1251 follows neither the ISO-standardised ISO-8859-5 nor the then-prevailing KOI-8. Microsoft assigned about twelve of the typography and business characters (including notably, the euro sign, €) in CP1252 to the code points 0x80–0x9F that, in ISO 8859, are assigned to C1 control codes. These assignments are also present in many other ANSI/Windows code pages at the same code-points. Windows did not use the C1 control codes, so this decision had no direct effect on Windows users. However, if included in a file transferred to a standards-compliant platform like Unix or MacOS, the information was invisible and potentially disruptive.


OEM code page

The OEM code pages (original equipment manufacturer) are used by Win32 console applications, and by virtual DOS machine, 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 VGA-compatible text mode#Fonts, fonts of VGA (and descendant) hardware suggest encoding of box-drawing character, 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 language, Thai and 1258 for Vietnamese language, Vietnamese) and four multibyte CJK code pages (Code page 932 (Microsoft Windows), 932, Code page 1386, 936, Windows-949, 949, Windows-950, 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 control codes, C0 (i.e. ASCII) control codes.


History

Initially, computer systems and system programming languages did not make a distinction between character (computing), characters and bytes: for the List of writing systems#Segmental script, segmental scripts used in most of Africa, the Americas, southern and south-east Asia, the Middle East and Europe, a character needs just one byte, but two or more bytes are needed for the ideographic sets used in the rest of the world. This led to much confusion subsequently. Microsoft software and systems prior to the Windows NT line are examples of this, because they use the OEM and ANSI code pages that do not make the distinction. Since the late 1990s, software and systems have adopted Unicode as their preferred storage format; this trend has been improved by the widespread adoption of XML which default to UTF-8 but also provides a mechanism for labelling the encoding used. All current Microsoft products and application program interfaces use Unicode internally, but some applications continue to use the default encoding of the computer's 'locale' when reading and writing text data to files or standard output. Therefore, files may still be encountered that are legible and intelligible in one part of the world but unintelligible mojibake in another.


UTF-8, UTF-16

Microsoft adopted a Unicode encoding (first the now-obsolete UCS-2, which was then Unicode's only encoding), i.e. UTF-16 for all its operating systems from Windows NT onwards, but now additionally Unicode in Microsoft Windows, supports and recommends using UTF-8 (aka CP_UTF8). UTF-16 uniquely encodes all Unicode characters in the Basic Multilingual Plane (BMP) using 16 bits but the remaining Unicode (e.g. emojis) is encoded with a 32-bit (four byte) code while the rest of the industry (Unix-like systems and the web), and now Microsoft chose UTF-8 (which uses one byte for the 7-bit ASCII character set, two or three bytes for other characters in the BMP, and four bytes for the remainder). Since Windows 10 version history#Version 1803 (April 2018 Update), Windows 10 version 1803, Windows machines can be configured to allow UTF-8 as the "ANSI" and OEM codepage.


List

The following Windows code pages exist:


Windows-125x series

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. The Windows-125x series includes nine of the ANSI code pages, and mostly covers scripts from Europe and West Asia with the addition of Vietnam. System encodings for Thai script, Thai and for East Asian languages were numbered to match similar IBM code pages and are used as both ANSI and OEM code pages; these are covered in following sections.


DOS code pages

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. * Code page 437, 437 – IBM PC US, 8-bit SBCS extended ASCII. Known as OEM-US, the encoding of the primary built-in font of VGA graphics cards. * Code page 708, 708 – Arabic, extended ISO 8859-6 (ASMO 708) * Code page 720, 720 – Arabic, retaining box drawing characters in their usual locations * Code page 737, 737 – "MS-DOS Greek". Retains all box drawing characters. More popular than 869. * Code page 775, 775 – "MS-DOS Baltic Rim" * Code page 850, 850 – "MS-DOS Latin 1". Full (re-arranged) repertoire of ISO 8859-1. * Code page 852, 852 – "MS-DOS Latin 2" * Code page 855, 855 – "MS-DOS Cyrillic". Mainly used for South Slavic languages. Includes (re-arranged) repertoire of ISO-8859-5. Not to be confused with cp866. * Code page 857, 857 – "MS-DOS Turkish" * Code page 858, 858 – Western European with euro sign * Code page 860, 860 – "MS-DOS Portuguese" * Code page 861, 861 – "MS-DOS Icelandic" * Code page 862, 862 – "MS-DOS Hebrew" * Code page 863, 863 – "MS-DOS French Canada" * Code page 864, 864 – Arabic * Code page 865, 865 – "MS-DOS Nordic" * Code page 866, 866 – "MS-DOS Cyrillic Russian", cp866. Sole purely OEM code page (rather than ANSI or both) included as a legacy encoding in WHATWG Encoding Standard for HTML5. * Code page 869, 869 – "MS-DOS Greek 2", IBM869. Full (re-arranged) repertoire of ISO 8859-7. * Windows-874, 874 – Thai alphabet, Thai, also used as the ANSI code page, extends ISO 8859-11 (and therefore TIS-620) with a few additional characters from Windows-1252. Corresponds to IBM code page 1162 (IBM-874 is similar but has different extensions).


East Asian multi-byte code pages

These often differ from the IBM code pages of the same number: code pages 932, 949 and 950 only partly match the IBM code pages of the same number, while the number 936 was used by IBM for another Simplified Chinese encoding which is now deprecated and 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. 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.


EBCDIC code pages

* 37 – IBM EBCDIC US-Canada, 8-bit SBCS * 500 – Latin 1 * 870 – IBM870 * 875 – cp875 * 1026 – EBCDIC Turkish * 1047 – IBM01047 – Latin 1 * 1140 – IBM01141 * 1141 – IBM01141 * 1142 – IBM01142 * 1143 – IBM01143 * 1144 – IBM01144 * 1145 – IBM01145 * 1146 – IBM01146 * 1147 – IBM01147 * 1148 – IBM01148 * 1149 – IBM01149 * Code page 20273, 20273 – EBCDIC Germany * Code page 20277, 20277 – EBCDIC Denmark/Norway * Code page 20278, 20278 – EBCDIC Finland/Sweden * Code page 20280, 20280 – EBCDIC Italy * Code page 20284, 20284 – EBCDIC Latin America/Spain * Code page 20285, 20285 – EBCDIC United Kingdom * Code page 20290, 20290 – EBCDIC Japanese * Code page 20297, 20297 – EBCDIC France * Code page 20420, 20420 – EBCDIC Arabic * Code page 20423, 20423 – EBCDIC Greek * Code page 20424, 20424 – x-EBCDIC-KoreanExtended * Code page 20833, 20833 – Korean * Code page 20838, 20838 – EBCDIC Thai * Code page 20924, 20924 – IBM00924 – IBM EBCDIC Latin 1/Open System (1047 + Euro symbol) * Code page 20871, 20871 – EBCDIC Icelandic * Code page 20880, 20880 – EBCDIC Cyrillic * Code page 20905, 20905 – EBCDIC Turkish * Code page 21025, 21025 – EBCDIC Cyrillic * Code page 21027, 21027 – Japanese EBCDIC (incomplete, deprecated)


Unicode-related code pages

* Code page 1200, 1200 – Unicode (BMP of ISO 10646, UTF-16LE). Available only to managed applications. * Code page 1201, 1201 – Unicode (UTF-16BE). Available only to managed applications. * Code page 12000, 12000 – UTF-32. Available only to managed applications. * Code page 12001, 12001 – UTF-32. Big-endian. Available only to managed applications. * Code page 65000, 65000 – Unicode (UTF-7) * Code page 65001, 65001 – Unicode (UTF-8)


Macintosh compatibility code pages

* Code page 10000, 10000 – Apple Macintosh Roman * Code page 10001, 10001 – Apple Macintosh Japanese * Code page 10002, 10002 – Apple Macintosh Chinese (traditional) (BIG-5) * Code page 10003, 10003 – Apple Macintosh Korean * Code page 10004, 10004 – Apple Macintosh Arabic * Code page 10005, 10005 – Apple Macintosh Hebrew * Code page 10006, 10006 – Apple Macintosh Greek * Code page 10007, 10007 – Apple Macintosh Cyrillic * Code page 10008, 10008 – Apple Macintosh Chinese (simplified) (GB 2312) * Code page 10010, 10010 – Apple Macintosh Romanian * Code page 10017, 10017 – Apple Macintosh Ukrainian * Code page 10021, 10021 – Apple Macintosh Thai * Code page 10029, 10029 – Apple Macintosh Roman II / Central Europe * Code page 10079, 10079 – Apple Macintosh Icelandic * Code page 10081, 10081 – Apple Macintosh Turkish * Code page 10082, 10082 – Apple Macintosh Croatian


ISO 8859 code pages

* Code page 28591, 28591 – ISO-8859-1 – Latin-1 (IBM equivalent: 819) * Code page 28592, 28592 –
ISO-8859-2 ISO/IEC 8859-2:1999, ''Information technology — 8-bit single-byte coded graphic character sets — Part 2: Latin alphabet No. 2'', is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1987. I ...
 – Latin-2 * Code page 28593, 28593 – ISO-8859-3 – Latin-3 or South European * Code page 28594, 28594 –
ISO-8859-4 ISO/IEC 8859-4:1998, ''Information technology — 8-bit single-byte coded graphic character sets — Part 4: Latin alphabet No. 4'', is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1988. I ...
 – Latin-4 or North European * Code page 28595, 28595 – ISO-8859-5 – Latin/Cyrillic * Code page 28596, 28596 – ISO-8859-6 – Latin/Arabic * Code page 28597, 28597 – ISO-8859-7 – Latin/Greek * Code page 28598, 28598 – ISO-8859-8 – Latin/Hebrew * Code page 28599, 28599 – ISO-8859-9 – Latin-5 or Turkish * Code page 28600, 28600 – ISO-8859-10 – Latin-6 * Code page 28601, 28601 – ISO-8859-11 – Latin/Thai * Code page 28602, 28602 – ISO-8859-12 – ''reserved for Latin/Devanagari but abandoned'' (not supported) * Code page 28603, 28603 – ISO-8859-13 – Latin-7 or Baltic Rim * Code page 28604, 28604 – ISO-8859-14 – Latin-8 or Celtic * Code page 28605, 28605 – ISO-8859-15 – Latin-9 * Code page 28606, 28606 – ISO-8859-16 – Latin-10 or South-Eastern European * Code page 38596, 38596 – ISO-8859-6, ISO-8859-6- – Latin/Arabic (logical bidirectional order) * Code page 38598, 38598 – ISO-8859-8-I, ISO-8859-8- – Latin/Hebrew (logical bidirectional order)


ITU-T code pages

* Code page 20105, 20105 – 7-bit ITU T.50, IA5 ISO-646-IRV, IRV (Western European) * Code page 20106, 20106 – 7-bit ITU T.50, IA5 German (DIN 66003) * Code page 20107, 20107 – 7-bit ITU T.50, IA5 Swedish (SEN 850200 C) * Code page 20108, 20108 – 7-bit ITU T.50, IA5 Norwegian (NS 4551-2) * Code page 20127, 20127 – 7-bit US-ASCII * Code page 20261, 20261 – T.61 (T.61-8bit) * Code page 20269, 20269 – ISO-6937


KOI8 code pages

* Code page 20866, 20866 – Russian – KOI8-R * Code page 21866, 21866 – Ukrainian – KOI8-U (or KOI8-RU in some versions)


Problems arising from the use of code pages

Microsoft strongly recommends using Unicode in modern applications, but many applications or data files still depend on the legacy code pages. * Programs need to know what code page to use in order to display the contents of (pre-Unicode) files correctly. If a program uses the wrong code page it may show text as mojibake. * The code page in use may differ between machines, so (pre-Unicode) files created on one machine may be unreadable on another. * Data is often improperly tagged with the code page, or not tagged at all, making determination of the correct code page to read the data difficult. * These Microsoft code pages differ to various degrees from some of the standards and other vendors' implementations. This isn't a Microsoft issue ''per se'', as it happens to all vendors, but the lack of consistency makes interoperability with other systems unreliable in some cases. * The use of code pages limits the set of characters that may be used. * Characters expressed in an unsupported code page may be converted to question marks (?) or other replacement characters, or to a simpler version (such as removing accents from a letter). In either case, the original character may be lost.


See also

* AppLocale – a utility to run non-Unicode (code page-based) applications in a locale of the user's choice.


References


External links


National Language Support (NLS) API Reference
Table showing ANSI and OEM codepages per language (from web-archive since Microsoft removed the original page)
IANA Charset Name Registrations

Unicode mapping table for Windows code pages

Unicode mappings of windows code pages with "best fit"
{{DEFAULTSORT:Windows Code Page Windows code pages,