Введение

Наборы символов, использовавшиеся в 1980-х и 1990-х годах.

Страницы кодов Windows – это наборы символов или страницы кодов (известные как кодировки символов в других операционных системах), использовавшиеся в Microsoft Windows с 1980-х и 1990-х годов. Страницы кодов Windows постепенно устарели с внедрением Unicode в Windows, хотя они по-прежнему поддерживаются как в Windows, так и на других платформах, и применяются при использовании Alt-кодов. В системах Windows существует две группы системных страниц кодов: OEM и собственные ("ANSI") страницы кодов Windows. (ANSI – это Американский национальный институт стандартов.) Страницы кодов в обеих этих группах являются расширенными ASCII-страницами кодов. Дополнительные страницы кодов поддерживаются стандартными подпрограммами преобразования Windows, но не используются в качестве системных страниц кодов какого-либо типа.

Страница кода ANSI

Страницы кодов ANSI (официально называемые "страницами кодов Windows" после того, как Microsoft признала прежний термин ошибочным) используются для нативных не-Unicode (например, байтоориентированных) приложений с графическим пользовательским интерфейсом в системах Windows. Термин "ANSI" является ошибочным, поскольку эти страницы кодов Windows не соответствуют никакому стандарту ANSI (Американского национального института стандартов); страница кода 1252 была основана на раннем проекте ANSI, который впоследствии стал международным стандартом ISO 8859-1.

Страницы кодов ANSI Windows, и особенно страница кода 1252, получили такое название, поскольку считалось, что они основаны на проектах, представленных в ANSI или предназначенных для него. Однако ни ANSI, ни ISO не стандартизировали ни одну из этих страниц кодов. Вместо этого, все современные продукты Microsoft и интерфейсы прикладных программ используют Unicode внутри, но некоторые приложения продолжают использовать кодировку по умолчанию, заданную "локалью" компьютера, при чтении и записи текстовых данных в файлы или стандартный вывод. Поэтому до сих пор могут встречаться файлы, которые читаются и понятны в одной части мира, но отображаются как нечитаемая абракадабра в другой.

UTF-8, UTF-16

Microsoft внедрила кодировку Unicode (сначала устаревшую UCS-2, которая в то время была единственной кодировкой Unicode), то есть UTF-16, для всех своих операционных систем, начиная с Windows NT, но дополнительно поддерживает UTF-8 (также известную как CP UTF-8) начиная с Windows 10 версии 1803. UTF-16 однозначно кодирует все символы Unicode в базовой многоязыковой плоскости (BMP) с использованием 16 бит, однако остальные символы Unicode (например, эмодзи) кодируются 32-битным (четырехбайтовым) кодом, в то время как остальная индустрия (Unix-подобные системы и веб), а теперь и Microsoft, использует UTF-8 (которая использует один байт для 7-битного набора ASCII, два или три байта для других символов в BMP и четыре байта для остальных).

Серия Windows-125x

Эти девять кодовых страниц являются расширенными 8-битными кодировками ASCII SBCS и были разработаны Microsoft для использования в качестве кодовых страниц ANSI в Windows. Они обычно известны по своим зарегистрированным в IANA названиям как windows <number>, но также иногда называются cp <number>, где "cp" означает "code page" (кодовая страница). Все они используются как кодовые страницы ANSI; Windows 1258 также используется как кодовая страница OEM. Серия Windows 125x включает девять кодовых страниц ANSI и в основном охватывает письменность Европы и Западной Азии, с добавлением вьетнамского языка. Системы кодирования для тайского и восточноазиатских языков были пронумерованы в соответствии с аналогичными кодовыми страницами IBM и используются как в качестве кодовых страниц ANSI, так и OEM; они рассматриваются в следующих разделах. ID Описание Связь с ISO 8859 или другими установленными кодировками1250Латиница 2 / Центрально-Европейская1251Кириллица1252Латиница 1 / Западно-Европейская1253ГреческийПохожа на ISO 8859-7, но некоторые символы, включая одну букву, перемещены.1254Турецкий1255ИвритПрактически надмножество ISO 8859-8, но с двумя несовместимыми изменениями в пунктуации.1256Арабский1257БалтийскаяНе ISO 8859-4; более поздняя ISO 8859-13 тесно связана, но имеет некоторые различия в доступных знаках пунктуации.1258Вьетнамский (также OEM)

Страницы с многобайтовым кодом Восточной Азии

Они часто отличаются от кодовых страниц IBM с тем же номером: кодовые страницы 932, 949 и 950 лишь частично соответствуют кодовым страницам IBM с тем же номером, в то время как номер 936 использовался IBM для другой кодировки упрощенного китайского языка, которая теперь устарела, а Windows 951, как временное решение, не связана с IBM 951. Эквивалентные кодовые страницы IBM указаны во втором столбце. Кодовые страницы 932, 936, 949 и 950/951 используются как ANSI, так и OEM кодовые страницы в соответствующих языковых стандартах. IDLanguageEncodingIBM EquivalentОтличие от IBM CCSID с тем же номеромUse932JapaneseShift JIS (вариант Microsoft)943IBM 932 также Shift JIS, имеет меньше расширений (но эти расширения общие) и заменяет некоторые варианты китайских символов (itaiji) для совместимости с более ранними версиями JIS C 6226. ANSI/OEM (Япония)936Chinese (simplified)GBK1386IBM 936 – это другая кодировка упрощенного китайского языка с другим методом кодирования, которая устарела с 1993 года. ANSI/OEM (КНР, Сингапур)949KoreanUnified Hangul Code1363IBM 949 также является надмножеством EUC KR, но с различными (конфликтующими) расширениями. ANSI/OEM (Республика Корея)950Chinese (traditional)Big5 (Microsoft variant)1373IBM 950 также Big5, но включает в себя другой набор расширений ETEN, добавляет дополнительные расширения с расширенным диапазоном байтов и не поддерживает Евро. ANSI/OEM (Тайвань, Гонконг)951Chinese (traditional) including CantoneseBig5 HKSCS (2001 ed.)5471IBM 951 – это двухбайтовая плоскость из IBM 949 (см. выше) и не связана с внутренним использованием Microsoft номера 951. ANSI/OEM (Гонконг, 98/NT4/2000/XP с патчем HKSCS)Несколько дополнительных многобайтовых кодовых страниц поддерживаются для декодирования или кодирования с использованием библиотек операционной системы, но не используются в качестве системной кодировки ни в одной языковой среде. IDIBM EquivalentLanguageEncodingUse1361 KoreanJohab (KS C 5601 1992 annex 3)Conversion20000 Chinese (traditional)Кодировка CNS 11643Conversion20001 Chinese (traditional)TCAConversion20002 Chinese (traditional)Big5 (вариант ETEN)Conversion20003938Chinese (traditional)IBM 5550Conversion20004 Chinese (traditional)TeletextConversion20005 Chinese (traditional)WangConversion20932954 (приблизительно)JapaneseEUC JPConversion209365479Chinese (simplified)GB 2312Conversion20949, 51949970KoreanWansung (8 бит с ASCII, т.е. EUC KR)Conversion

Страницы кода Unicode

IDIBM EquivalentDescription12001202, 1203Unicode (BMP по ISO 10646, UTF 16LE). Доступно только для управляемых приложений.28598 ISO 8859 8 – Латинский/еврейский (визуальный порядок; издание 1988 года, т.е. без и ).2010610117 бит IA5 Немецкий (DIN 66003)2010710187 бит IA5 Шведский (SEN 850200 C)2010810167 бит IA5 Норвежский (NS 4551 2)201273677 бит US ASCII202611036T.61 (T.61 8bit)20269?ISO 6937

Проблемы, возникающие в связи с использованием страниц кода

Microsoft настоятельно рекомендует использовать Unicode в современных приложениях, но многие приложения или файлы данных по-прежнему зависят от устаревших кодовых страниц. Программам необходимо знать, какую кодовую страницу использовать для корректного отображения содержимого файлов (до Unicode). Если программа использует неверную кодовую страницу, текст может отображаться в виде "кракозябр". Кодовая страница, используемая на разных компьютерах, может отличаться, поэтому файлы (до Unicode), созданные на одном компьютере, могут быть нечитаемыми на другом. Данные часто некорректно маркируются кодовой страницей или не маркируются вовсе, что затрудняет определение правильной кодовой страницы для чтения данных. Эти кодовые страницы Microsoft в различной степени отличаются от некоторых стандартов и реализаций других производителей. Это не является специфической проблемой Microsoft, поскольку она встречается у всех производителей, но отсутствие согласованности делает взаимодействие с другими системами ненадежным в некоторых случаях. Использование кодовых страниц ограничивает набор доступных символов. Символы, представленные в неподдерживаемой кодовой странице, могут быть заменены вопросительными знаками (?) или другими символами-заменителями, либо упрощенной версией (например, удалением диакритических знаков). В любом случае, исходный символ может быть потерян.