Кодовая страница
Кодовая страница (англ. code page) — таблица, сопоставляющая каждому значению байта некоторый символ (или его отсутствие). Обычно код символа имеет размер 8 бит, так что кодовая страница может содержать максимум 256 символов, из чего вытекает резкая недостаточность всякой 8-битной кодовой страницы для представления многоязычных текстов. К тому же часть символов используется как управляющие, из-за чего число печатных символов редко превышает 223[1].
Исторически термин code page был введён корпорацией IBM; сменные кодовые страницы использовались для поддержки различных языков (имеющих алфавитные системы письма). В последнее время имеется путаница между термином «кодовая страница» и более общим понятием набора символов (кодировки).
Кодовые страницы сегодня Править
В настоящее время в основном используются кодировки двух типов: совместимые с ASCII и совместимые с EBCDIC[2], с подавляющим преобладанием первых. В ASCII-совместимых кодировках фиксированы коды 95 печатных символов и 33 управляющих, а остальные 128 кодовых позиций используются для различных символов, не входящих в ASCII.
Для кодирования текстов на русском языке (то есть букв кириллицы) наиболее широко применяются следующие кодовые страницы:
- Windows-1251, она же Microsoft code page 1251 (CP1251) — в системах Windows;
- Семейство кодовых страниц KOI8;
- Альтернативная кодировка, она же IBM code page 866 — в системах DOS, а также в консоли Windows (см. ниже);
- MacCyrillic — на компьютерах Macintosh.
- ДКОИ / IBM 880
Использование различных кодовых страниц создаёт много неудобств как для пользователей, так и для программистов. При попытке прочесть текстовый файл при помощи кодовой страницы, несовместимой с той в которой он был создан, возникают ошибки[en]*. В последние годы получил широкое распространение Unicode как альтернатива традиционным кодовым страницам.
В системе Microsoft Windows Править
В системах Microsoft Windows кодовые страницы являются важным компонентом локализации, задаваемым в ключах реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\[3].
Исторически (в системах Windows 3.x и Windows 9x) имелось два типа кодовых страниц. Кодовые страницы «ANSI»[4] (англ. ANSI code page, в реестре: ACP), также называемые Windows[5] — родные кодовые страницы Windows. Содержат много символов типографики, но почти не содержат псевдографику по причине того, что предназначены для использования в графическом окружении. Впоследствии корпорация Microsoft признала, что использование имени ANSI было вызвано недоразумением.[6] К кодировкам «ANSI»/Windows относят, в частности, Windows-1252 и вышеупомянутую Windows-1251. Microsoft также относит к кодовым страницам кодовые таблицы, некоторые позиции которых требуют второго (завершающего) байта для формирования символа, то есть допускающие двухбайтовое представление некоторых символов[7], хотя они, строго говоря, являются уже кодировками с переменной длиной символа.
Кодировки OEM (англ. OEM code page, в реестре: OEMCP) основаны на CP437 и содержат VGA-совместимую псевдографику. Вышеупомянутая альтернативная кодировка известна в Windows как CP866.
Начиная с Windows NT появился третий класс кодовых страниц: кодировки Macintosh (англ. Macintosh code page, в реестре: MACCP), совместимых с MacOS.
Примечания Править
- ↑ Одним из немногих исключений является кодировка VISCII для вьетнамской латиницы, совместимая с ASCII за вычетом шести кодов в зоне управляющих символов, заменённых на буквы, см. RFC 1456. Таким образом, она содержит 229 печатных символов.
- ↑ Кодировки на базе EBCDIC (например, ДКОИ) используются только на некоторых мэйнфреймах.
- ↑ REG: CurrentControlSet, PART 1 Архивная копия от 10 января 2013 на Wayback Machine, Microsoft (англ.)
- ↑ Кодовые страницы в Visual C++ Архивная копия от 22 февраля 2014 на Wayback Machine, MSDN
- ↑ Code Pages Архивная копия от 22 февраля 2014 на Wayback Machine, MSDN
- ↑ MSDN: Glossary of Terms (неопр.). Дата обращения: 2 марта 2010. Архивировано из оригинала 28 марта 2016 года.
- ↑ Windows code pages Архивная копия от 2 мая 2014 на Wayback Machine, MSDN