Расширенный ASCII — это набор кодировок символов , включающий (большую часть) исходного набора из 96 символов ASCII , а также до 128 дополнительных символов. Не существует формального определения «расширенного ASCII», и даже использование этого термина иногда подвергается критике, [1] [2] [3], поскольку его можно ошибочно интерпретировать как то, что Американский национальный институт стандартов (ANSI) обновил свой стандарт ANSI X3.4-1986 , включив в него больше символов, или что этот термин идентифицирует единую однозначную кодировку, что не соответствует действительности.
Стандарт ISO ISO 8859 был первым международным стандартом, формализовавшим (ограниченное) расширение набора символов ASCII: из множества кодируемых им языковых вариантов наиболее известен на Западе ISO 8859-1 («ISO Latin 1»), поддерживающий большинство западноевропейских языков. Существует множество других расширенных кодировок ASCII (более 220 кодовых страниц DOS и Windows ). EBCDIC («другой» основной код символов) также разработал множество расширенных вариантов (более 186 кодовых страниц EBCDIC) за десятилетия.
Все современные операционные системы используют Unicode , который поддерживает тысячи символов. Однако расширенный ASCII остается важным в истории вычислений , и поддержка нескольких расширенных наборов символов ASCII потребовала написания программного обеспечения таким образом, чтобы впоследствии было намного проще поддерживать метод кодировки UTF-8 .
ASCII был разработан в 1960-х годах для телетайпов и телеграфии , а также некоторых вычислений. Ранние телетайпы были электромеханическими, не имели микропроцессора и имели лишь достаточную электромеханическую память для функционирования. Они полностью обрабатывали один символ за раз, возвращаясь в состояние ожидания сразу после этого; это означало, что любые управляющие последовательности должны были быть длиной только в один символ, и, таким образом, для таких элементов управления необходимо было зарезервировать большое количество кодов. Они были ударными принтерами , производными от пишущих машинок , и могли печатать только фиксированный набор глифов, которые отливались в металлическом элементе или элементах; это также поощряло минимальный набор глифов.
Семибитный ASCII улучшился по сравнению с предыдущими пяти- и шестибитными кодами. Из 2 7 =128 кодов 33 использовались для управления и 95 тщательно отобранных печатных символов (94 глифа и один пробел), которые включают английский алфавит (заглавные и строчные буквы), цифры и 31 знак препинания и символ: все символы стандартной пишущей машинки США плюс несколько выбранных для задач программирования. Некоторые популярные периферийные устройства реализовали только подмножество из 64 печатных символов: телетайп модели 33 не мог передавать «a» через «z» или пять менее распространенных символов («`», «{», «|», «}» и «~»). и когда они получали такие символы, они вместо этого печатали «A» через «Z» (принудительно все заглавные ) и пять других в основном похожих символов («@», «[», «\", «]» и «^»).
Набор символов ASCII едва ли достаточно велик для использования в американском английском и не имеет многих глифов, распространенных в наборе , и слишком мал для универсального использования. Гораздо больше букв и символов желательны, полезны или требуются для непосредственного представления букв алфавитов, отличных от английского, больше видов пунктуации и пробелов, больше математических операторов и символов (× ÷ ⋅ ≠ ≥ ≈ π и т. д.), некоторые уникальные символы, используемые некоторыми языками программирования, идеограммы , логограммы , символы рисования прямоугольников и т. д.
Самой большой проблемой для пользователей компьютеров по всему миру были другие алфавиты. Английский алфавит ASCII почти вмещает европейские языки, если заменить акцентированные буквы на неакцентированные буквы или двухсимвольные приближения, такие как ss для ß . Модифицированные варианты 7-битного ASCII появились быстро, обменяв некоторые редко используемые символы на крайне востребованные символы или буквы, такие как замена "#" на "£" на британских телетайпах, "\" на "¥" в Японии или "₩" в Корее и т. д. В результате получилось по меньшей мере 29 наборов вариантов. 12 кодовых точек были изменены по меньшей мере одним измененным набором, оставив только 82 "инвариантных" кода . Однако языки программирования присвоили значение многим замененным символам, были придуманы обходные пути, такие как трехсимвольные последовательности C "??<" и "??>" для представления "{" и "}". [4] Языки с разными базовыми алфавитами могли использовать транслитерацию, например, замену всех латинских букв наиболее подходящими кириллическими буквами (что приводило к странному, но в некоторой степени читаемому тексту, когда английский печатался кириллицей или наоборот). Были также разработаны схемы, позволяющие накладывать друг на друга две буквы (часто с контролем забоя между ними) для получения букв с ударением. Пользователи не были довольны ни одним из этих компромиссов, и они часто плохо поддерживались. [ необходима цитата ]
Когда в 1970-х годах компьютеры и периферийные устройства стандартизировали восьмибитные байты , стало очевидно, что компьютеры и программное обеспечение могут обрабатывать текст, использующий наборы из 256 символов, практически без дополнительных затрат на программирование и без дополнительных затрат на хранение. (Предполагая, что неиспользуемый 8-й бит каждого байта не использовался повторно каким-либо образом, например, для проверки ошибок, булевых полей или упаковки 8 символов в 7 байтов.) Это позволило бы использовать ASCII без изменений и предоставить еще 128 символов. Многие производители разработали 8-битные наборы символов, состоящие из ASCII плюс до 128 неиспользуемых кодов: можно было бы создать кодировки, которые охватывали все более используемые западноевропейские (и латиноамериканские) языки, такие как датский, голландский, французский, немецкий, португальский, испанский, шведский и другие.
128 дополнительных символов все еще недостаточно для охвата всех целей, всех языков или даже всех европейских языков, поэтому появление многих фирменных и национальных 8-битных наборов символов, полученных из ASCII, было неизбежным. Перевод между этими наборами ( транскодирование ) сложен (особенно если символ отсутствует в обоих наборах); и часто не делался, производя моджибаке (получитаемый результирующий текст, часто пользователи учились вручную декодировать его). В конце 1990-х годов были попытки сотрудничества или координации со стороны национальных и международных органов по стандартизации, но фирменные наборы производителей оставались самыми популярными, прежде всего потому, что международные стандарты исключали символы, популярные или свойственные определенным культурам.
Различные фирменные модификации и расширения ASCII появились на мэйнфреймах и мини-компьютерах , отличных от EBCDIC , особенно в университетах.
Hewlett-Packard начала добавлять европейские символы в свой расширенный 7-битный / 8-битный набор символов ASCII HP Roman Extension примерно в 1978/1979 годах для использования на своих рабочих станциях, терминалах и принтерах. Позже это превратилось в широко используемые обычные 8-битные наборы символов HP Roman-8 и HP Roman-9 (а также ряд их вариантов).
Домашние компьютеры Atari и Commodore добавили множество графических символов в свой нестандартный ASCII (соответственно, ATASCII и PETSCII , основанные на оригинальном стандарте ASCII 1963 года).
Набор символов TRS-80 для домашнего компьютера TRS-80 добавил 64 полуграфических символа (от 0x80 до 0xBF), которые реализовали блочную графику низкого разрешения. (Каждый блочный графический символ отображался как сетка пикселей 2x3, причем каждый блочный пиксель эффективно контролировался одним из младших 6 бит.) [5]
IBM представила восьмибитные расширенные коды ASCII на оригинальном IBM PC и позже выпустила вариации для разных языков и культур. IBM назвала такие наборы символов кодовыми страницами и назначила номера как тем, которые она сама придумала, так и многим, которые придумали и использовали другие производители. Соответственно, наборы символов очень часто обозначаются номером их кодовой страницы IBM. В кодовых страницах, совместимых с ASCII, нижние 128 символов сохраняли свои стандартные значения ASCII, и различные страницы (или наборы символов) могли быть доступны в верхних 128 символах. Например, компьютеры DOS , созданные для североамериканского рынка, использовали кодовую страницу 437 , которая включала символы с ударением, необходимые для французского, немецкого и нескольких других европейских языков, а также некоторые графические символы рисования линий. Более крупный набор символов позволял создавать документы на комбинации языков, таких как английский и французский (хотя французские компьютеры обычно используют кодовую страницу 850 ), но не, например, на английском и греческом (для которых требовалась кодовая страница 737 ).
Apple Computer представили свои собственные восьмибитные расширенные коды ASCII в Mac OS , такие как Mac OS Roman . Apple LaserWriter также представил набор символов Postscript .
Корпорация Digital Equipment Corporation (DEC) разработала набор символов Multinational Character Set , в котором было меньше символов, но больше комбинаций букв и диакритических знаков. Он поддерживался VT220 и более поздними компьютерными терминалами DEC . Позже он стал основой для других наборов символов, таких как Lotus International Character Set (LICS), ECMA-94 и ISO 8859-1 .
В 1987 году Международная организация по стандартизации (ISO) опубликовала набор стандартов для восьмибитных расширений ASCII, ISO 8859. Самым популярным из них был ISO 8859-1 (также называемый «ISO Latin 1»), который содержит символы, достаточные для большинства распространенных западноевропейских языков. Другие стандарты в группе 8859 включали ISO 8859-2 для восточноевропейских языков, использующих латиницу , и ISO 8859-5 для языков, использующих кириллицу , и другие.
Одним из примечательных отличий стандартов ISO от некоторых расширенных наборов ASCII, специфичных для поставщиков, является то, что 32 позиции символов 80 16 по 9F 16 , которые соответствуют управляющим символам ASCII с установленным старшим битом, зарезервированы ISO для использования в качестве управляющих и не используются для печатных символов (они также зарезервированы в Unicode [6] ). Это соглашение почти повсеместно игнорировалось другими расширенными наборами ASCII.
Microsoft намеревалась использовать стандарты ISO 8859 в Windows, [ требуется ссылка ], но вскоре заменила неиспользуемые управляющие символы C1 дополнительными символами, создав фирменный набор символов Windows-1252, который иногда ошибочно маркируется как ANSI . Добавленные символы включали «закругленные» кавычки и другие типографские элементы, такие как длинное тире , знак евро и буквы, отсутствующие во французском и финском языках. Это стало наиболее используемым расширенным ASCII в мире и часто используется в Интернете, даже когда указан 8859-1. [7] [8]
Значение каждой расширенной кодовой точки может быть разным в каждой кодировке. Для правильной интерпретации и отображения текстовых данных (последовательности символов), включающих расширенные коды, аппаратное и программное обеспечение, которое считывает или получает текст, должно использовать определенную расширенную кодировку ASCII, которая к нему применяется. Применение неправильной кодировки приводит к нерациональной замене многих или всех расширенных символов в тексте.
Программное обеспечение может использовать фиксированный выбор кодировки или может выбирать из палитры кодировок по умолчанию, проверяя настройки страны и языка компьютера, считывая объявление в тексте, анализируя текст , спрашивая пользователя, позволяя пользователю выбирать или переопределять и/или по умолчанию используя последний выбор. Когда текст передается между компьютерами, которые используют разные операционные системы, программное обеспечение и кодировки, применение неправильной кодировки может быть обычным делом.
Поскольку полный английский алфавит и наиболее используемые символы английского языка включены в семибитные кодовые точки ASCII, которые являются общими для всех кодировок (даже для большинства фирменных кодировок), текст на английском языке меньше повреждается при интерпретации его с неправильной кодировкой, но текст на других языках может отображаться как mojibake (полная чушь). Поскольку многие стандарты Интернета используют ISO 8859-1, и поскольку Microsoft Windows (использующая надмножество кодовой страницы 1252 ISO 8859-1) является доминирующей операционной системой для персональных компьютеров сегодня, [ нужна цитата ] [ когда? ] необъявленное использование ISO 8859-1 является довольно обычным явлением и, как правило, может предполагаться, если нет указаний на иное.
Многие протоколы связи , в первую очередь SMTP и HTTP , требуют, чтобы кодировка символов контента была помечена идентификаторами наборов символов, назначенными IANA .
Когда браузер обнаруживает ISO-8859-1, он обычно по умолчанию использует Windows-1252, поскольку Windows-1252 имеет на 32 международных символа больше.