- Code Pages
- Кодовая страница Windows — Windows code page
- СОДЕРЖАНИЕ
- Кодовая страница ANSI
- Кодовая страница OEM
- История
- UTF-8, UTF-16
- Список
- Windows-125x серии
- Кодовые страницы DOS
- Многобайтовые кодовые страницы Восточной Азии
- Кодовые страницы EBCDIC
- Кодовые страницы, связанные с Unicode
- Кодовые страницы совместимости с Macintosh
- Кодовые страницы ISO 8859
- Кодовые страницы ITU-T
- Кодовые страницы KOI8
- Проблемы, возникающие при использовании кодовых страниц
Code Pages
Most applications written today handle character data primarily as Unicode, using the UTF-16 encoding. However, many legacy applications continue to use character sets based on code pages. Even new applications sometimes have to work with code pages, often for one of the following reasons:
- To communicate with legacy applications.
- To communicate with older mail and news servers, which might not always support Unicode.
- To communicate with the Windows Console.
New Windows applications should use Unicode to avoid the inconsistencies of varied code pages and for ease of localization.
Each code page is represented by a code page identifier, for example, 1252, and is handled by the Unicode and character set API functions. For a list of supported code page identifiers, see Code Page Identifiers. The «Code Pages» reference on the Microsoft Go Global Developer Center gives full descriptions of many code pages.
Windows code pages, commonly called «ANSI code pages», are code pages for which non-ASCII values (values greater than 127) represent international characters. These code pages are used natively in Windows Me, and are also available on Windows NT and later.
Originally, Windows code page 1252, the code page commonly used for English and other Western European languages, was based on an American National Standards Institute (ANSI) draft. That draft eventually became ISO 8859-1, but Windows code page 1252 was implemented before the standard became final, and is not exactly the same as ISO 8859-1.
Many Windows API functions have «A» (ANSI) and «W» (wide, Unicode) versions. The «A» version handles text based on Windows code pages, while the «W» version handles Unicode text. See Windows Data Types for Strings and Conventions for Function Prototypes.
Windows code pages are also sometimes referred to as «active code pages» or «system active code pages». A Windows operating system always has one currently active Windows code page. All ANSI versions of API functions use the currently active code page.
Original equipment manufacturer (OEM) code pages are code pages for which non-ASCII values represent line drawing and punctuation characters. These code pages were originally used for MS-DOS and are still used for console applications. They are also used for the non-extended file names in the FAT12, FAT16, and FAT32 file systems, as described in Character Sets Used in File Names. The usual OEM code page for English is code page 437.
For both Windows code pages and OEM code pages, the code values 0x00 through 0x7F correspond to the 7-bit ASCII character set. Code values 0x00 through 0x19 and 0x7F always represent standardized control characters and 0x20 through 0x7E represent standardized displayable characters. Characters represented by the remaining codes, 0x80 through 0xff, vary among character sets. Each character set includes different special characters, typically customized for a language or group of languages. Windows code page 1252 and OEM code page 437 are generally used in the United States.
In addition to Windows and OEM code pages, your applications can use non-native code pages. Examples are EBCDIC and Macintosh code pages.
Two encodings of Unicode (UTF-7 and UTF-8) are implemented as code pages. Like other code pages, each page is known by a numeric identifier and can be handled with many of the same Unicode and character set API functions.
Code pages can be either single-byte character set (SBCS) pages or double-byte character set (DBCS) pages. In SBCS pages, each byte directly encodes a single character, so that it is possible to represent exactly 256 distinct characters (including control characters, letters, digits, punctuation, symbols, and the like). DBCS code pages are used for languages such as Japanese and Chinese. In such a code page, some characters have two-byte encodings with certain byte values (always values greater than 127) serving as «lead bytes». Instead of encoding characters in their own right, lead bytes can be mapped to a character only in conjunction with a «trail byte».
Some legacy protocols require the use of SBCS and DBCS code pages. Each SBCS/DBCS code page supports different characters, but no code page supports the full breadth of characters provided by Unicode. Each SBCS/DBCS code page supports a different subset, differently encoded.
Data converted from one SBCS or DBCS code page to another is subject to corruption, because the same data value on different code pages can encode a different character. Data converted from Unicode to SBCS or DBCS is subject to data loss, because a given code page might not be able to represent every character used in that particular Unicode data.
In addition to SBCS and DBCS code pages, your applications have available the multibyte character set code pages 52936, 54936, 51949, and 5022x, which use an approach similar to that for a DBCS. A multibyte character set code page goes beyond two-byte encodings of some characters, however. UTF-7 and UTF-8 use a similar approach to encode Unicode based on a 7-bit and 8-bit bytes, respectively. For more information, see Unicode.
Several Unicode and character set functions allow your applications to handle code pages. An application can use the GetCPInfo and GetCPInfoEx functions to obtain information about a code page. This information includes the default character used when a character in a converted string has no corresponding entry in the code page.
An application can use the MultiByteToWideChar and WideCharToMultiByte functions to convert between strings based on Windows code pages and Unicode strings. Although their names refer to «MultiByte», these functions work equally well with SBCS, DBCS, and multibyte character set code pages.
WideCharToMultiByte can lose some data if the supplied code page cannot represent all characters in a Unicode string.
Your application can convert between Windows code pages and OEM code pages using the standard C runtime library functions. However, use of these functions presents a risk of data loss because the characters that can be represented by each code page do not match exactly.
Your applications can also call the GetACP function. This function retrieves the identifier of the current Windows (ANSI) code page.
Кодовая страница Windows — Windows code page
Кодовые страницы Windows — это наборы символов или кодовых страниц (известные как кодировки символов в других операционных системах), используемые в Microsoft Windows с 1980-х и 1990-х годов. Кодовые страницы Windows постепенно вытеснялись, когда Unicode был реализован в Windows , хотя они по-прежнему поддерживаются как в Windows, так и на других платформах, и по-прежнему применяются при использовании сочетаний клавиш Alt-кода .
В системах Windows есть две группы кодовых страниц: OEM и собственные кодовые страницы Windows («ANSI»). Кодовые страницы в обеих этих группах являются расширенными кодовыми страницами ASCII .
СОДЕРЖАНИЕ
Кодовая страница ANSI
Псевдоним (а) | ANSI (неверное название) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Стандарт | Стандарт кодирования WHATWG | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Расширяется | US-ASCII | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Предшествует | ISO 8859 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Преемник | Юникод UTF-16 (в Win32 API) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Я БЫ | Описание | Связь с ISO 8859 или другими установленными кодировками |
---|---|---|
1250 | Latin 2 / Центральноевропейская | Аналогичен ISO-8859-2, но перемещает несколько символов, включая несколько букв. |
1251 | Кириллица | Несовместим как с ISO-8859-5, так и с KOI-8 . |
1252 | Латиница 1 / западноевропейская | Расширенный набор ISO-8859-1 (без элементов управления C1). Буквенный репертуар соответственно аналогичен CP850 . |
1253 | Греческий | Аналогичен ISO 8859-7, но перемещает несколько символов, включая букву. |
1254 | турецкий | Расширенный стандарт ISO 8859-9 (без элементов управления C1). |
1255 | иврит | Практически надмножество ISO 8859-8 , но с двумя несовместимыми изменениями пунктуации. |
1256 | арабский | Несовместимо с ISO 8859-6 ; кодовая страница OEM 708 скорее является расширенным набором ISO 8859-6 (ASMO 708). |
1257 | Балтийский | Не ISO 8859-4 ; более поздний ISO 8859-13 тесно связан, но с некоторыми отличиями в доступной пунктуации. |
1258 | Вьетнамский (также OEM) | Не связано с VSCII или VISCII , использует меньшее количество базовых символов с диакритическими знаками , сочетающих. |
Кодовые страницы DOS
Они также основаны на ASCII. Большинство из них включены для использования в качестве кодовых страниц OEM; кодовая страница 874 также используется как кодовая страница ANSI.
- 437 — IBM PC US, 8-битный расширенный ASCIISBCS . Кодировка основного встроенного шрифта видеокарт VGA, известная как OEM-US.
- 708 — арабский, расширенный ISO 8859-6 (ASMO 708)
- 720 — арабский, сохраняя символы рисования прямоугольников на их обычных местах
- 737 — «MS-DOS греческий». Сохраняет все символы рисования прямоугольников. Популярнее, чем 869.
- 775 — «MS-DOS Балтийский край»
- 850 — «MS-DOS Latin 1». Полный (переработанный) репертуар ISO 8859-1 .
- 852 — «MS-DOS Latin 2»
- 855 — «Кириллица MS-DOS». В основном используется для южнославянских языков . Включает (реорганизованный) репертуар ISO-8859-5 . Не путать с cp866.
- 857 — «MS-DOS Турецкий»
- 858 — Западноевропейский со знаком евро
- 860 — «Португальский MS-DOS»
- 861 — «Исландский MS-DOS»
- 862 — «Еврейский MS-DOS»
- 863 — «MS-DOS Французская Канада»
- 864 — арабский
- 865 — «MS-DOS Nordic»
- 866 — «MS-DOS Кириллица русская», cp866. Единственная кодовая страница исключительно OEM (а не ANSI или оба), включенная в качестве устаревшей кодировки в WHATWG Encoding Standard для HTML5 .
- 869 — «MS-DOS Greek 2», IBM869. Полный (переработанный) репертуар ISO 8859-7 .
- 874 — Тайский язык , также используемый в качестве кодовой страницы ANSI, расширяет ISO 8859-11 (и, следовательно, TIS-620 ) несколькими дополнительными символами из Windows-1252. Соответствует кодовой странице IBM 1162 (IBM-874 аналогична, но имеет другие расширения).
Многобайтовые кодовые страницы Восточной Азии
Часто они лишь частично совпадают с кодовыми страницами IBM с одним и тем же номером: кодовые страницы 932, 936 и 949 отличаются от кодовых страниц IBM с тем же номером, тогда как Windows-951, как часть кладжа , не связана с IBM-951. Эквивалентные кодовые страницы IBM приведены во втором столбце. Кодовые страницы 932, 936, 949 и 950/951 используются в качестве кодовых страниц как ANSI, так и OEM для рассматриваемых локалей.
Я БЫ | Эквивалент IBM | Язык | Кодирование | Использовать |
---|---|---|---|---|
932 | 943 | Японский | Shift JIS (вариант Microsoft) | ANSI / OEM (Япония) |
936 | 1386 | Китайский упрощенный) | ГБК | ANSI / OEM (КНР, Сингапур) |
949 | 1363 | Корейский | Единый код хангыль | ANSI / OEM (Республика Корея) |
950 | 1370, 1373 | Китайский традиционный) | Big5 (вариант Microsoft) | ANSI / OEM (Тайвань, Гонконг) |
951 | 5471 | Китайский традиционный) | Big5-HKSCS (изд. 2001 г.) | ANSI / OEM (Гонконг, 98 / NT4 / 2000 / XP с патчем HKSCS) |
Еще несколько многобайтовых кодовых страниц поддерживаются для декодирования или кодирования с использованием библиотек операционной системы, но не используются в качестве системного кодирования ни в одной локали.
Я БЫ | Эквивалент IBM | Язык | Кодирование | Использовать |
---|---|---|---|---|
1361 | — | Корейский | Джохаб (KS C 5601-1992, приложение 3) | Преобразование |
20000 | 964 | Китайский традиционный) | CNS 11643 | Преобразование |
20001 | — | Китайский традиционный) | TCA | Преобразование |
20002 | — | Китайский традиционный) | Big5 (вариант ETEN) | Преобразование |
20003 | ? | Китайский традиционный) | IBM 5500 | Преобразование |
20004 | — | Китайский традиционный) | Телетекст | Преобразование |
20005 | — | Китайский традиционный) | Ван | Преобразование |
20932 , 51932 | 954 (примерно) | Японский | EUC-JP | Преобразование |
20936 , 51936 | — | Китайский упрощенный) | GB2312 | Преобразование |
20949 , 51949 | — | Корейский | Wansung (8-битный с ASCII, т.е. EUC-KR ) | Преобразование |
Кодовые страницы EBCDIC
- 37 — IBM EBCDIC США-Канада, 8-битный SBCS
- 500 — латиница 1
- 870 — IBM870
- 875 — cp875
- 1026 — EBCDIC Турецкий
- 1047 — IBM01047 — Латиница 1
- 1140 — IBM01141
- 1141 — IBM01141
- 1142 — IBM01142
- 1143 — IBM01143
- 1144 — IBM01144
- 1145 — IBM01145
- 1146 — IBM01146
- 1147 — IBM01147
- 1148 — IBM01148
- 1149 — IBM01149
- 20273 — EBCDIC Германия
- 20277 — EBCDIC Дания / Норвегия
- 20278 — EBCDIC Финляндия / Швеция
- 20280 — EBCDIC Италия
- 20284 — EBCDIC Латинская Америка / Испания
- 20285 — EBCDIC Соединенное Королевство
- 20290 — EBCDIC японский
- 20297 — EBCDIC Франция
- 20420 — EBCDIC арабский
- 20423 — EBCDIC Греческий
- 20424 — x-EBCDIC-KoreanExtended
- 20833 — корейский
- 20838 — EBCDIC тайский
- 20924 — IBM00924 — IBM EBCDIC Latin 1 / Открытая система (1047 + символ евро)
- 20871 — исландский EBCDIC
- 20880 — EBCDIC кириллица
- 20905 — EBCDIC Турецкий
- 21025 — EBCDIC кириллица
- 21027 — японский EBCDIC (неполный, не рекомендуется)
Кодовые страницы, связанные с Unicode
- 1200 — Юникод (BMP по ISO 10646, UTF-16LE ). Доступно только для управляемых приложений
- 1201 — Юникод ( UTF-16BE ). Доступно только для управляемых приложений
- 12000 — UTF-32 . Доступно только для управляемых приложений
- 12001 — UTF-32 . С прямым порядком байтов. Доступно только для управляемых приложений
- 65000 — Юникод ( UTF-7 )
- 65001 — Юникод ( UTF-8 )
Кодовые страницы совместимости с Macintosh
- 10000 — Apple Macintosh Роман
- 10001 — Apple Macintosh на японском языке
- 10002 — Apple Macintosh Chinese (традиционный) (BIG-5)
- 10003 — Apple Macintosh корейский
- 10004 — Apple Macintosh на арабском языке
- 10005 — Apple Macintosh на иврите
- 10006 — Apple Macintosh греческий
- 10007 — кириллица Apple Macintosh
- 10008 — Apple Macintosh китайский (упрощенный) (GB 2312)
- 10010 — Apple Macintosh на румынском языке
- 10017 — Apple Macintosh украинский
- 10021 — Apple Macintosh Thai
- 10029 — Apple Macintosh Roman II / Центральная Европа
- 10079 — Исландский Apple Macintosh
- 10081 — Apple Macintosh Турецкий
- 10082 — Apple Macintosh хорватский
Кодовые страницы ISO 8859
- 28591 — ISO-8859-1 — Latin-1 (эквивалент IBM: 819)
- 28592 — ISO-8859-2 — Latin-2
- 28593 — ISO-8859-3 — Latin-3 или южноевропейский
- 28594 — ISO-8859-4 — Latin-4 или североевропейский
- 28595 — ISO-8859-5 — Латиница / кириллица
- 28596 — ISO-8859-6 — Латинский / арабский
- 28597 — ISO-8859-7 — Латинский / греческий
- 28598 — ISO-8859-8 — Латинский / Иврит
- 28599 — ISO-8859-9 — Latin-5 или турецкий
- 28600 — ISO-8859-10 — Latin-6
- 28601 — ISO-8859-11 — Латинский / тайский
- 28602 — ISO-8859-12 — зарезервировано для латиницы / деванагари, но заброшено (не поддерживается)
- 28603 — ISO-8859-13 — Latin-7 или Baltic Rim
- 28604 — ISO-8859-14 — Latin-8 или кельтский
- 28605 — ISO-8859-15 — Latin-9
- 28606 — ISO-8859-16 — Latin-10 или Юго-Восточная Европа
- 38596 — ISO-8859-6- I — Латинский / арабский (логический двунаправленный порядок)
- 38598 — ISO-8859-8- I — Латинский / иврит (логический двунаправленный порядок)
Кодовые страницы ITU-T
- 20105 — 7-битный IA5IRV (западноевропейский)
- 20106 — 7-битный IA5 немецкий (DIN 66003)
- 20107 — 7-битный IA5 шведский (SEN 850200 C)
- 20108 — 7-битный норвежский IA5 (NS 4551-2)
- 20127 — 7-битный US-ASCII
- 20261 — T.61 (T.61-8bit)
- 20269 — ISO-6937
Кодовые страницы KOI8
- 20866 — Русский — КОИ8-Р
- 21866 — украинский — КОИ8-У (или КОИ8-РУ в некоторых вариантах)
Проблемы, возникающие при использовании кодовых страниц
Microsoft настоятельно рекомендует использовать Unicode в современных приложениях, но многие приложения или файлы данных по-прежнему зависят от устаревших кодовых страниц.
- Программы должны знать, какую кодовую страницу использовать, чтобы правильно отображать содержимое файлов (до Unicode). Если программа использует неправильную кодовую страницу, она может отображать текст как моджибаке .
- Используемая кодовая страница может отличаться на разных машинах, поэтому файлы (до Unicode), созданные на одной машине, могут быть нечитаемыми на другой.
- Данные часто неправильно помечены кодовой страницей или вообще не помечены, что затрудняет определение правильной кодовой страницы для чтения данных.
- Эти кодовые страницы Microsoft в разной степени отличаются от некоторых стандартов и реализаций других поставщиков. Это не проблема Microsoft как таковая , как это происходит со всеми поставщиками, но отсутствие согласованности делает взаимодействие с другими системами в некоторых случаях ненадежным.
- Использование кодовых страниц ограничивает набор символов, которые могут использоваться.
- Символы, выраженные в неподдерживаемой кодовой странице, могут быть преобразованы в вопросительные знаки (?) Или другие заменяющие символы или в более простую версию (например, удаление диакритических знаков из буквы). В любом случае исходный персонаж может быть утерян.