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,[ citation needed ] 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.
Alias(es) | ANSI (misnomer) |
---|---|
Standard | WHATWG Encoding Standard |
Extends | US-ASCII |
Preceded by | ISO 8859 |
Succeeded by | Unicode UTF-16 (in Win32 API) |
ANSI code pages (officially called "Windows code pages" [1] after Microsoft accepted the former term being a misnomer [2] ) are used for native non-Unicode (say, byte oriented) applications using a graphical user interface 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 was based on an early ANSI draft that became the international standard ISO 8859-1, [2] 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 (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 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 (IANA) as "Windows-number", although "Windows-936" is treated as a synonym for "GBK". Windows code page 932 is instead labelled as "Windows-31J". [3]
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: [2]
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.[ citation needed ]
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: for the 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 subsequently led to much confusion. 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. [4] All current Microsoft products and application program interfaces use Unicode internally,[ citation needed ] 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.[ citation needed ] Therefore, files may still be encountered that are legible and intelligible in one part of the world but unintelligible mojibake in another.
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 additionally supports UTF-8 (aka CP_UTF8
) since Windows 10 version 1803. [5] 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).
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 [6] 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 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.
ID | Description | Relationship to ISO 8859 or other established encodings |
---|---|---|
1250 [7] [8] | Latin 2 / Central European | Similar to ISO-8859-2 but moves several characters, including multiple letters. |
1251 [9] [10] | Cyrillic | Incompatible with both ISO-8859-5 and KOI-8. |
1252 [11] [12] | Latin 1 / Western European | Superset of ISO-8859-1 (without C1 controls). Letter repertoire accordingly similar to CP850. |
1253 [13] [14] | Greek | Similar to ISO 8859-7 but moves several characters, including a letter. |
1254 [15] [16] | Turkish | Superset of ISO 8859-9 (without C1 controls). |
1255 [17] [18] | Hebrew | Almost a superset of ISO 8859-8, but with two incompatible punctuation changes. |
1256 [19] [20] | Arabic | Not compatible with ISO 8859-6; rather, OEM Code page 708 is an ISO 8859-6 (ASMO 708) superset. |
1257 [21] [22] | Baltic | Not ISO 8859-4; the later ISO 8859-13 is closely related, but with some differences in available punctuation. |
1258 [23] [24] | 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 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.
ID | Language | Encoding | IBM Equivalent | Difference from IBM CCSID of same number | Use |
---|---|---|---|---|---|
932 | Japanese | Shift JIS (Microsoft variant) | 943 [26] | IBM-932 is also Shift JIS, has fewer extensions (but those extensions it has are in common), and swaps some variant Chinese characters (itaiji) for interoperability with earlier editions of JIS C 6226. | ANSI/OEM (Japan) |
936 | Chinese (simplified) | GBK | 1386 | IBM-936 is a different Simplified Chinese encoding with a different encoding method, which has been deprecated since 1993. | ANSI/OEM (PRC, Singapore) |
949 | Korean | Unified Hangul Code | 1363 | IBM-949 is also an EUC-KR superset, but with different (colliding) extensions. | ANSI/OEM (Republic of Korea) |
950 | Chinese (traditional) | Big5 (Microsoft variant) | 1373 [27] | IBM-950 is also Big5, but includes a different subset of the ETEN extensions, adds further extensions with an expanded trail byte range, and lacks the Euro. | ANSI/OEM (Taiwan, Hong Kong) |
951 | Chinese (traditional) including Cantonese | Big5-HKSCS (2001 ed.) | 5471 [28] | IBM-951 is the double-byte plane from IBM-949 (see above), and unrelated to Microsoft's internal use of the number 951. | 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.
ID | IBM Equivalent | Language | Encoding | Use |
---|---|---|---|---|
1361 | - | Korean | Johab (KS C 5601-1992 annex 3) | Conversion |
20000 | - | Chinese (traditional) | An encoding of CNS 11643 | Conversion |
20001 | - | Chinese (traditional) | TCA | Conversion |
20002 | - | Chinese (traditional) | Big5 (ETEN variant) | Conversion |
20003 | 938 | Chinese (traditional) | IBM 5550 | Conversion |
20004 | - | Chinese (traditional) | Teletext | Conversion |
20005 | - | Chinese (traditional) | Wang | Conversion |
20932 | 954 (roughly) | Japanese | EUC-JP | Conversion |
20936 | 5479 | Chinese (simplified) | GB 2312 | Conversion |
20949, 51949 | 970 | Korean | Wansung (8-bit with ASCII, i.e. EUC-KR) [29] | Conversion |
ID | IBM Equivalent | Description |
---|---|---|
37 | Country Extended Code Page for US, Canada, Netherlands, Portugal, Brazil, Australia, New Zealand [30] | |
500 | Country Extended Code Page for Belgium, Canada and Switzerland | |
870 | EBCDIC Latin-2 | |
875 | EBCDIC Greek | |
1026 | EBCDIC Latin-5 (Turkish) | |
1047 | Country Extended Code Page for Open Systems (POSIX) | |
1140 | Euro-sign Country Extended Code Page for US, Canada, Netherlands, Portugal, Brazil, Australia, New Zealand | |
1141 | Euro-sign Country Extended Code Page for Austria and Germany | |
1142 | Euro-sign Country Extended Code Page for Denmark and Norway | |
1143 | Euro-sign Country Extended Code Page for Finland and Sweden | |
1144 | Euro-sign Country Extended Code Page for Italy | |
1145 | Euro-sign Country Extended Code Page for Spain and Latin America | |
1146 | Euro-sign Country Extended Code Page for UK | |
1147 | Euro-sign Country Extended Code Page for France | |
1148 | Euro-sign Country Extended Code Page for Belgium, Canada and Switzerland | |
1149 | Euro-sign Country Extended Code Page for Iceland | |
20273 | 273 | Country Extended Code Page for Germany |
20277 | 277 | Country Extended Code Page for Denmark/Norway |
20278 | 278 | Country Extended Code Page for Finland/Sweden |
20280 | 280 | Country Extended Code Page for Italy |
20284 | 284 | Country Extended Code Page for Latin America/Spain |
20285 | 285 | Country Extended Code Page for United Kingdom |
20290 | 290 | Japanese Katakana EBCDIC |
20297 | 297 | Country Extended Code Page for France |
20420 | 420 | EBCDIC Arabic |
20423 | 423 | EBCDIC Greek with Extended Latin |
20424 | - | x-EBCDIC-KoreanExtended |
20833 | 833 | Korean EBCDIC for N-Byte Hangul |
20838 | 838 | EBCDIC Thai |
20871 | 871 | Country Extended Code Page for Iceland |
20880 | 880 | EBCDIC Cyrillic (DKOI) |
20905 | 905 | EBCDIC Latin-3 (Maltese, Esperanto and Turkish) |
20924 | 924 | EBCDIC Latin-9 (including Euro sign) for Open Systems (POSIX) |
21025 | 1025 | EBCDIC Cyrillic (DKOI) with section sign |
21027 | (1027) | Japanese EBCDIC (an incomplete implementation of IBM code page 1027, [31] now deprecated) [32] |
ID | IBM Equivalent | Description |
---|---|---|
1200 | 1202, 1203 | Unicode (BMP of ISO 10646, UTF-16LE). Available only to managed applications. [32] |
1201 | 1200, 1201 | Unicode (UTF-16BE). Available only to managed applications. [32] |
12000 | 1234, 1235 | UTF-32. Available only to managed applications. [32] |
12001 | 1232, 1233 | UTF-32. Big-endian. Available only to managed applications. [32] |
65000 | - | Unicode (UTF-7) |
65001 | 1208, 1209 | Unicode (UTF-8) |
ID | IBM Equivalent | Description |
---|---|---|
10000 | 1275 | Apple Macintosh Roman |
10001 | - | Apple Macintosh Japanese |
10002 | - | Apple Macintosh Chinese (traditional) (BIG-5) |
10003 | - | Apple Macintosh Korean |
10004 | - | Apple Macintosh Arabic |
10005 | - | Apple Macintosh Hebrew |
10006 | 1280 | Apple Macintosh Greek |
10007 | 1283 | Apple Macintosh Cyrillic |
10008 | - | Apple Macintosh Chinese (simplified) (GB 2312) |
10010 | 1285 | Apple Macintosh Romanian |
10017 | - | Apple Macintosh Ukrainian |
10021 | - | Apple Macintosh Thai |
10029 | 1282 | Apple Macintosh Roman II / Central Europe |
10079 | 1286 | Apple Macintosh Icelandic |
10081 | 1281 | Apple Macintosh Turkish |
10082 | 1284 | Apple Macintosh Croatian |
ID | IBM Equivalent | Description |
---|---|---|
28591 | 819, 5100 | ISO-8859-1 – Latin-1 |
28592 | 912 | ISO-8859-2 – Latin-2 |
28593 | 913 | ISO-8859-3 – Latin-3 or South European |
28594 | 914 | ISO-8859-4 – Latin-4 or North European |
28595 | 915 | ISO-8859-5 – Latin/Cyrillic |
28596 | - | ISO-8859-6 – Latin/Arabic |
28597 | 813, 4909, 9005 | ISO-8859-7 – Latin/Greek (1987 edition, i.e. without euro sign, drachma sign or iota subscript) [33] |
28598 | - | ISO-8859-8 – Latin/Hebrew (visual order; 1988 edition, i.e. without LRM and RLM) [33] |
28599 | 920 | ISO-8859-9 – Latin-5 or Turkish |
28600 | 919 | ISO-8859-10 – Latin-6 or Nordic |
28601 | - | ISO-8859-11 – Latin/Thai |
28602 | - | ISO-8859-12 – reserved for Latin/Devanagari but abandoned (not supported) |
28603 | 921 | ISO-8859-13 – Latin-7 or Baltic Rim |
28604 | - | ISO-8859-14 – Latin-8 or Celtic |
28605 | 923 | ISO-8859-15 – Latin-9 |
28606 | - | ISO-8859-16 – Latin-10 or South-Eastern European |
38596 | 1089 | ISO-8859-6-I – Latin/Arabic (logical bidirectional order) |
38598 | 916, 5012 | ISO-8859-8-I – Latin/Hebrew (logical bidirectional order; 1988 edition, i.e. without LRM and RLM) [33] |
ID | IBM Equivalent | Description |
---|---|---|
20105 | 1009 | 7-bit IA5 IRV (Western European) [34] [35] [36] |
20106 | 1011 | 7-bit IA5 German (DIN 66003) [34] [35] [37] |
20107 | 1018 | 7-bit IA5 Swedish (SEN 850200 C) [34] [35] [38] |
20108 | 1016 | 7-bit IA5 Norwegian (NS 4551-2) [34] [35] [39] |
20127 | 367 | 7-bit US-ASCII [34] [35] [40] |
20261 | 1036 | T.61 (T.61-8bit) |
20269 | ? | ISO-6937 |
ID | IBM Equivalent | Description |
---|---|---|
20866 | 878 | Russian – KOI8-R |
21866 | 1167, 1168 | Ukrainian – KOI8-U (or KOI8-RU in some versions) [41] |
Microsoft strongly recommends using Unicode in modern applications, but many applications or data files still depend on the legacy code pages.
ISO/IEC 8859-3:1999, Information technology — 8-bit single-byte coded graphic character sets — Part 3: Latin alphabet No. 3, is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1988. It is informally referred to as Latin-3 or South European. It was designed to cover Turkish, Maltese and Esperanto, though the introduction of ISO/IEC 8859-9 superseded it for Turkish. The encoding was popular for users of Esperanto, but fell out of use as application support for Unicode became more common.
ISO/IEC 646 is a set of ISO/IEC standards, described as Information technology — ISO 7-bit coded character set for information interchange and developed in cooperation with ASCII at least since 1964. Since its first edition in 1967 it has specified a 7-bit character code from which several national standards are derived.
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.
A text file is a kind of computer file that is structured as a sequence of lines of electronic text. A text file exists stored as data within a computer file system. In operating systems such as CP/M and DOS, where the operating system does not keep track of the file size in bytes, the end of a text file is denoted by placing one or more special characters, known as an end-of-file (EOF) marker, as padding after the last line in a text file. On modern operating systems such as Microsoft Windows and Unix-like systems, text files do not contain any special EOF character, because file systems on those operating systems keep track of the file size in bytes. Most text files need to have end-of-line delimiters, which are done in a few different ways depending on operating system. Some operating systems with record-orientated file systems may not use new line delimiters and will primarily store text files with lines separated as fixed or variable length records.
Windows-1252 or CP-1252 is a single-byte character encoding of the Latin alphabet that was used by default in Microsoft Windows for English and many Romance and Germanic languages including Spanish, Portuguese, French, and German. This character-encoding scheme is used throughout the Americas, Western Europe, Oceania, and much of Africa.
ISO/IEC 8859-8, Information technology — 8-bit single-byte coded graphic character sets — Part 8: Latin/Hebrew alphabet, is part of the ISO/IEC 8859 series of ASCII-based standard character encodings. ISO/IEC 8859-8:1999 from 1999 represents its second and current revision, preceded by the first edition ISO/IEC 8859-8:1988 in 1988. It is informally referred to as Latin/Hebrew. ISO/IEC 8859-8 covers all the Hebrew letters, but no Hebrew vowel signs. IBM assigned code page 916 to it. This character set was also adopted by Israeli Standard SI1311:2002, with some extensions.
ISO/IEC 8859-6:1999, Information technology — 8-bit single-byte coded graphic character sets — Part 6: Latin/Arabic alphabet, is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1987. It is informally referred to as Latin/Arabic. It was designed to cover Arabic. Only nominal letters are encoded, no preshaped forms of the letters, so shaping processing is required for display. It does not include the extra letters needed to write most Arabic-script languages other than Arabic itself.
ISO/IEC 8859-7:2003, Information technology — 8-bit single-byte coded graphic character sets — Part 7: Latin/Greek alphabet, is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1987. It is informally referred to as Latin/Greek. It was designed to cover the modern Greek language. The original 1987 version of the standard had the same character assignments as the Greek national standard ELOT 928, published in 1986. The table in this article shows the updated 2003 version which adds three characters. Microsoft has assigned code page 28597 a.k.a. Windows-28597 to ISO-8859-7 in Windows. IBM has assigned code page 813 to ISO 8859-7. (IBM CCSID 813 is the original encoding. CCSID 4909 adds the euro sign. CCSID 9005 further adds the drachma sign and ypogegrammeni.)
ISO/IEC 8859-9:1999, Information technology — 8-bit single-byte coded graphic character sets — Part 9: Latin alphabet No. 5, is part of the ISO/IEC 8859 series of ASCII-based standard character encodings, first edition published in 1989. It is designated ECMA-128 by Ecma International and TS 5881 as a Turkish standard. It is informally referred to as Latin-5 or Turkish. It was designed to cover the Turkish language, designed as being of more use than the ISO/IEC 8859-3 encoding. It is identical to ISO/IEC 8859-1 except for the replacement of six Icelandic characters with characters unique to the Turkish alphabet. And the uppercase of i is İ; the lowercase of I is ı.
Windows-1251 is an 8-bit character encoding, designed to cover languages that use the Cyrillic script such as Russian, Ukrainian, Belarusian, Bulgarian, Serbian Cyrillic, Macedonian and other languages.
Code page 850 is a code page used under DOS operating systems in Western Europe. Depending on the country setting and system configuration, code page 850 is the primary code page and default OEM code page in many countries, including various English-speaking locales, whilst other English-speaking locales default to the hardware code page 437.
Code page 855 is a code page used under DOS to write Cyrillic script.
Code page 866 is a code page used under DOS and OS/2 in Russia to write Cyrillic script. It is based on the "alternative code page" developed in 1984 in IHNA AS USSR and published in 1986 by a research group at the Academy of Science of the USSR. The code page was widely used during the DOS era because it preserves all of the pseudographic symbols of code page 437 and maintains alphabetic order of Cyrillic letters. Initially this encoding was only available in the Russian version of MS-DOS 4.01 (1990), but with MS-DOS 6.22 it became available in any language version.
Windows code page 1253, commonly known by its IANA-registered name Windows-1253 or abbreviated as cp1253, is a Microsoft Windows code page used to write modern Greek. It is not capable of supporting the older polytonic Greek.
Windows-1254 is a code page used under Microsoft Windows, to write Turkish that it was designed for. Characters with codepoints A0 through FF are compatible with ISO 8859-9, but the CR range, which is reserved for C1 control codes in ISO 8859, is instead used for additional characters. It is similar to ISO/IEC 8859-1 except for the replacement of six Icelandic characters with characters unique to the Turkish alphabet.
Windows-1256 is a code page used under Microsoft Windows to write Arabic and other languages that use Arabic script, such as Persian and Urdu.
Windows-1257 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 named LST 1590-4.
Code page 852 is a code page used under DOS to write Central European languages that use Latin script.
Several 8-bit character sets (encodings) were designed for binary representation of common Western European languages, which use the Latin alphabet, a few additional letters and ones with precomposed diacritics, some punctuation, and various symbols. These character sets also happen to support many other languages such as Malay, Swahili, and Classical Latin.
Code page 862 is a code page used under DOS in Israel for Hebrew.
The term "ANSI" as used to signify Windows code pages is a historical reference, but is nowadays a misnomer that continues to persist in the Windows community. The source of this comes from the fact that the Windows code page 1252 was originally based on an ANSI draft—which became International Organization for Standardization (ISO) Standard 8859-1. "ANSI applications" are usually a reference to non-Unicode or code page–based applications.