Кодовые страницы Windows — это наборы символов или кодовых страниц (известные как кодировки символов в других операционных системах), используемые в Microsoft Windows с 1980-х и 1990-х годов. Кодовые страницы Windows были постепенно заменены, когда в Windows был реализован Unicode , [ необходима ссылка ], хотя они по-прежнему поддерживаются как в Windows, так и на других платформах и по-прежнему применяются при использовании сочетаний клавиш Alt-кода .
Текущие версии Windows поддерживают Unicode , новые приложения Windows должны использовать Unicode (UTF-8), а не 8-битные кодировки символов. [1]
В системах Windows есть две группы системных кодовых страниц: кодовые страницы OEM и Windows-native ("ANSI"). (ANSI — Американский национальный институт стандартов .) Кодовые страницы в обеих этих группах являются расширенными кодовыми страницами ASCII. Дополнительные кодовые страницы поддерживаются стандартными процедурами преобразования Windows, но не используются ни в качестве одного из типов системной кодовой страницы.
Кодовые страницы ANSI (официально называемые «кодовыми страницами Windows» [2] после того, как Microsoft признала прежний термин неверным [3] ) используются для собственных не-Unicode (например, байт-ориентированных ) приложений, использующих графический пользовательский интерфейс в системах Windows. Термин «ANSI» является неверным, поскольку эти кодовые страницы Windows не соответствуют ни одному стандарту ANSI (Американский национальный институт стандартов) ; кодовая страница 1252 была основана на раннем проекте ANSI, который стал международным стандартом ISO 8859-1 , [3] который добавляет еще 32 управляющих кода и место для 96 печатных символов. Среди прочих отличий, кодовые страницы Windows выделяют печатные символы в дополнительное пространство управляющих кодов, делая их в лучшем случае нечитаемыми для операционных систем, соответствующих стандартам.)
Большинство устаревших кодовых страниц "ANSI" имеют номера кодовых страниц в шаблоне 125x. Однако 874 (тайский) и восточноазиатские многобайтовые кодовые страницы "ANSI" ( 932 , 936 , 949 , 950 ), все из которых также используются в качестве кодовых страниц OEM, пронумерованы в соответствии с кодировками IBM, ни одна из которых не идентична кодировкам Windows (хотя большинство из них похожи). Хотя кодовая страница 1258 также используется в качестве кодовой страницы OEM, она является оригинальной для Microsoft, а не расширением существующей кодировки. IBM присвоила свои собственные, другие номера для вариантов Microsoft, они приведены для справки в списках ниже, где это применимо.
Все кодовые страницы Windows 125x, а также 874 и 936, помечены IANA как "Windows - number ", хотя "Windows-936" рассматривается как синоним " GBK ". Кодовая страница Windows 932 вместо этого помечена как "Windows-31J". [4]
Кодовые страницы ANSI Windows, и особенно кодовая страница 1252 , были так названы, поскольку они якобы были основаны на проектах, представленных или предназначенных для ANSI. Однако ANSI и ISO не стандартизировали ни одну из этих кодовых страниц. Вместо этого они либо: [3]
Microsoft назначила около двенадцати типографских и деловых символов (включая, в частности, знак евро , €) в CP1252 кодовым точкам 0x80–0x9F, которые в ISO 8859 назначены управляющим кодам C1 . Эти назначения также присутствуют во многих других кодовых страницах ANSI/Windows в тех же кодовых точках. Windows не использовала управляющие коды C1, поэтому это решение не оказало прямого влияния на пользователей Windows. Однако, если включить информацию в файл, переданный на платформу, соответствующую стандартам, такую как Unix или MacOS, она была невидимой и потенциально разрушительной. [ необходима цитата ]
Кодовые страницы OEM ( оригинальный производитель оборудования ) используются консольными приложениями Win32 и виртуальной DOS и могут считаться пережитком DOS и оригинальной архитектуры IBM PC . Отдельный набор кодовых страниц был реализован не только из-за совместимости, но и потому, что шрифты оборудования VGA (и его потомков) предполагают кодировку символов рисования линий , совместимую с кодовой страницей 437. Большинство кодовых страниц OEM разделяют многие кодовые точки, особенно для небуквенных символов, со второй (не ASCII) половиной CP437.
Типичная кодовая страница OEM, в своей второй половине, не похожа ни на одну кодовую страницу ANSI/Windows даже приблизительно. Тем не менее, две однобайтовые кодовые страницы фиксированной ширины (874 для тайского и 1258 для вьетнамского ) и четыре многобайтовые кодовые страницы CJK ( 932 , 936 , 949 , 950 ) используются как в качестве кодовых страниц OEM, так и в качестве кодовых страниц ANSI. Кодовая страница 1258 использует комбинированные диакритические знаки , поскольку для вьетнамского языка требуется более 128 комбинаций букв и диакритических знаков. Это контрастирует с VISCII , который заменяет некоторые управляющие коды C0 (т. е. ASCII).
Ранние компьютерные системы имели ограниченное хранилище и ограничивали количество бит, доступных для кодирования символа . Хотя более ранние фирменные кодировки имели меньше, Американский стандартный код для обмена информацией (ASCII) остановился на семи битах: этого было достаточно для кодирования 96-элементного подмножества символов, используемых в США. Поскольку восьмибитные байты стали преобладать, Microsoft (и другие) расширили репертуар до 224, чтобы обрабатывать множество других применений, таких как символы рисования коробок. Необходимость предоставления предварительно составленных символов для рынков Западной Европы и Южной Америки потребовала другого набора символов: Microsoft установила принцип кодовых страниц, по одной для каждого алфавита. Для сегментных шрифтов, используемых в большинстве стран Африки, Америки, Южной и Юго-Восточной Азии, Ближнего Востока и Европы, символу нужен всего один байт, но для идеографических наборов, используемых в остальном мире , требуются два или более байтов . Модель кодовой страницы не могла справиться с этой задачей.
С конца 1990-х годов программное обеспечение и системы приняли Unicode в качестве предпочтительного формата кодировки символов: Unicode предназначен для обработки миллионов символов. Все текущие продукты Microsoft и интерфейсы прикладных программ используют Unicode внутри себя, [ требуется цитата ], но некоторые приложения продолжают использовать кодировку по умолчанию [ требуется разъяснение ] «локали» компьютера при чтении и записи текстовых данных в файлы или стандартный вывод. [ требуется цитата ] Поэтому все еще могут встречаться файлы, которые читаются и воспринимаются в одной части мира, но являются непонятными mojibake в другой.
Microsoft приняла кодировку Unicode (сначала ныне устаревшую UCS-2 , которая тогда была единственной кодировкой Unicode), т. е. UTF-16 для всех своих операционных систем , начиная с Windows NT, но дополнительно поддерживает UTF-8 (он же CP_UTF8
) с Windows 10 версии 1803. [ 5]
UTF-16 уникально кодирует все символы Unicode в базовой многоязыковой плоскости (BMP) с использованием 16 бит, но остальной Unicode (например, эмодзи ) кодируется 32-битным (четырехбайтовым) кодом — в то время как остальная часть отрасли ( Unix-подобные системы и веб), а теперь и Microsoft выбрали UTF-8 (который использует один байт для 7-битного набора символов ASCII , два или три байта для других символов в BMP и четыре байта для оставшихся).
Существуют следующие кодовые страницы Windows:
Все эти девять кодовых страниц являются расширенными кодировками ASCII 8-бит SBCS и были разработаны Microsoft для использования в качестве кодовых страниц ANSI в Windows. Они широко известны по своим зарегистрированным в IANA [6] именам как windows-<number>
, но иногда их также называют cp<number>
, "cp" для "кодовой страницы". Все они используются в качестве кодовых страниц ANSI; Windows-1258 также используется в качестве кодовой страницы OEM.
Серия Windows-125x включает девять кодовых страниц ANSI и в основном охватывает письменности из Европы и Западной Азии с добавлением Вьетнама . Системные кодировки для тайского и восточноазиатских языков были пронумерованы для соответствия аналогичным кодовым страницам IBM и используются как кодовые страницы ANSI и OEM; они рассматриваются в следующих разделах.
Они также основаны на ASCII. Большинство из них включены для использования в качестве кодовых страниц OEM; кодовая страница 874 также используется в качестве кодовой страницы ANSI.
Они часто отличаются от кодовых страниц IBM с тем же номером: кодовые страницы 932, 949 и 950 лишь частично соответствуют кодовым страницам IBM с тем же номером, в то время как номер 936 использовался IBM для другой кодировки упрощенного китайского языка, которая сейчас устарела, а Windows-951, как часть кладжа , не имеет отношения к IBM-951. Эквивалентные кодовые страницы IBM приведены во втором столбце. Кодовые страницы 932, 936, 949 и 950/951 используются как кодовые страницы ANSI и OEM в рассматриваемых локалях.
Несколько дополнительных многобайтовых кодовых страниц поддерживаются для декодирования или кодирования с использованием библиотек операционной системы, но не используются ни в качестве какого-либо вида системного кодирования ни в одной из локалей.
Microsoft настоятельно рекомендует использовать Unicode в современных приложениях, но многие приложения или файлы данных по-прежнему зависят от устаревших кодовых страниц.
Термин "ANSI", используемый для обозначения кодовых страниц Windows, является исторической ссылкой, но в настоящее время является неправильным наименованием, которое продолжает сохраняться в сообществе Windows. Источником этого является тот факт, что кодовая страница Windows 1252 изначально была основана на проекте ANSI, который стал стандартом Международной организации по стандартизации (ISO) 8859-1. "Приложения ANSI" обычно являются ссылкой на не-Unicode или основанные на кодовых страницах приложения.