stringtranslate.com

Управляющий персонаж

В вычислительной технике и телекоммуникациях управляющий символ или непечатаемый символ ( NPC ) — это кодовая точка в наборе символов , которая не представляет собой письменный символ или символ. Они используются в качестве внутриполосной сигнализации для создания эффектов, отличных от добавления символа в текст. Все остальные символы в основном являются графическими символами , также известными как печатные символы (или печатные символы ), за исключением, возможно, символов « пробела ». В стандарте ASCII имеется 33 управляющих символа, например код 7, BEL , который звонит в концевой звонок.

История

Процедурные знаки в азбуке Морзе являются формой управляющего символа.

В коде Бодо 1870 года была введена форма управляющих символов : NUL и DEL. В код Мюррея 1901 года были добавлены возврат каретки (CR) и перевод строки (LF), а другие версии кода Бодо включали другие управляющие символы.

Символ колокольчика ( BEL), который звонил в колокольчик для оповещения операторов, также был одним из первых управляющих символов телетайпа .

Некоторые управляющие символы также называются «эффекторами формата».

В ASCII

Ранним символам присвоены 32 управляющих символа, пробел и символы удаления. (ISO 2047, MIL-STD-188-100, 1972 г.)

Было определено довольно много управляющих символов (33 в ASCII, а стандарт ECMA-48 добавляет еще 32). Это произошло потому, что ранние терминалы имели очень примитивные механические или электрические элементы управления, из-за которых реализация любого API с запоминанием состояния была довольно дорогостоящей, поэтому отдельный код для каждой функции выглядел как требование. Быстро стало возможным и недорогим интерпретировать последовательности кодов для выполнения функции, и производители устройств нашли способ отправлять сотни инструкций устройствам. В частности, они использовали код ASCII 27 10 (escape), за которым следовала серия символов, называемая «управляющей последовательностью» или «escape-последовательностью». Механизм был изобретен Бобом Бемером , отцом ASCII. Например, последовательность кода 27 10 , за которой следуют печатные символы «[2;10H», приведет к тому, что терминал Digital Equipment Corporation VT100 переместит курсор в 10-ю ячейку 2-й строки экрана. Для этих последовательностей существует несколько стандартов, в частности ANSI X3.64 . Но количество нестандартных вариантов использования велико, особенно среди типографий, где технологии развиваются гораздо быстрее, чем может угнаться какой-либо орган по стандартизации.

Все записи в таблице ASCII под кодом 32 10 (технически набор управляющих кодов C0 ) относятся к этому типу, включая CR и LF , используемые для разделения строк текста. Код 127 10 ( DEL ) также является управляющим символом. [1] [2] В расширенные наборы ASCII , определенные стандартом ISO 8859, добавлены коды от 128 10 до 159 10 в качестве управляющих символов. В первую очередь это было сделано для того, чтобы при удалении старшего бита печатный символ не менялся на управляющий код C0. Этот второй набор называется набором C1 .

Эти 65 управляющих кодов были перенесены в Unicode . В Unicode добавлено больше символов, которые можно считать элементами управления, но он проводит различие между этими «символами форматирования» (такими как необъединяющий символ нулевой ширины ) и 65 управляющими символами.

Набор символов расширенного двоично-десятичного кода обмена (EBCDIC) содержит 65 управляющих кодов, включая все управляющие коды ASCII, а также дополнительные коды, которые в основном используются для управления периферийными устройствами IBM.

Управляющие символы в ASCII, которые все еще широко используются, включают:

Управляющие символы могут быть описаны как совершающие что-то, когда пользователь их вводит, например, код 3 ( символ конца текста , ETX, ^C ) для прерывания текущего процесса или код 4 ( символ конца передачи , EOT, ^D ), используется для завершения ввода текста в Unix или для выхода из оболочки Unix . Такое использование обычно не имеет ничего общего с их использованием в выводимом тексте.

В Юникоде

В Юникоде «управляющими символами» являются U+0000—U+001F (элементы управления C0), U+007F (удаление) и U+0080—U+009F (элементы управления C1). Их общая категория — «Cc». Коды форматирования различны и относятся к общей категории «Cf». Управляющие символы Cc не имеют имени в Юникоде, но вместо этого им присваиваются метки, например «<control-001A>». [4]

Отображать

Существует ряд методов отображения непечатаемых символов, которые можно проиллюстрировать символом колокольчика в кодировке ASCII :

Как управляющие символы отображаются на клавиатуре

На клавиатурах на основе ASCII есть клавиша с надписью « Control », «Ctrl» или (редко) «Cntl», которая используется во многом как клавиша Shift, нажимая в сочетании с другой клавишей с буквой или символом. В одной реализации клавиша управления генерирует код на 64 позиции ниже кода для (обычно) заглавной буквы, с которой она нажимается в сочетании с (т.е. вычитает 0x40 из значения кода ASCII (обычно) заглавной буквы). Другая реализация заключается в том, чтобы взять код ASCII, созданный ключом, и поразрядно И сложить его с 0x1F, обнулив биты с 5 по 7. Например, нажатие «control» и буквы «g» (0110 0111 в двоичном формате ) создает код 7 (BELL, 7 в десятичной системе счисления или 0000 0111 в двоичной системе). Символ NULL (код 0) представлен сочетанием клавиш Ctrl-@, где «@» — это код, расположенный непосредственно перед «A» в наборе символов ASCII. Для удобства некоторые терминалы принимают Ctrl-Пробел как псевдоним для Ctrl-@. В любом случае это создает один из 32 управляющих кодов ASCII от 0 до 31. Ни один из подходов не работает для создания символа DEL из-за его особого местоположения в таблице и его значения (код 127 10 ), Ctrl-? иногда используется для этого персонажа. [5]

Когда клавиша управления удерживается нажатой, буквенные клавиши выдают одни и те же управляющие символы независимо от состояния клавиш Shift или Caps Lock . Другими словами, не имеет значения, будет ли ключ создавать прописную или строчную букву. Интерпретация управляющей клавиши с пробелом, графическими символами и цифровыми клавишами (коды ASCII от 32 до 63) различается в зависимости от системы. Некоторые из них выдают тот же код символов, как если бы клавиша управления не была нажата. Другие системы переводят эти клавиши в управляющие символы, когда клавиша управления удерживается нажатой. Интерпретация управляющего ключа с ключами, отличными от ASCII («внешними»), также различается в зависимости от системы.

Управляющие символы часто преобразуются в печатную форму, известную как обозначение каретки, путем печати каретки (^), а затем символа ASCII, который имеет значение управляющего символа плюс 64. Таким образом, управляющие символы, созданные с помощью буквенных клавиш, отображаются в верхнем регистре. форма письма. Например, ^G представляет код 7, который генерируется нажатием клавиши G при удерживании клавиши управления.

Клавиатуры также обычно имеют несколько отдельных клавиш, которые создают коды управляющих символов. Например, клавиша с надписью «Backspace» обычно выдает код 8, код «Tab» 9, код «Enter» или «Return» 13 (хотя на некоторых клавиатурах может выдаваться код 10 для «Enter»).

Многие клавиатуры содержат клавиши, которые не соответствуют никаким печатным или управляющим символам ASCII, например стрелки управления курсором и функции обработки текста . Соответствующие нажатия клавиш передаются компьютерным программам одним из четырех методов: присвоением неиспользуемых в противном случае управляющих символов; использование какой-либо кодировки, отличной от ASCII; использование многосимвольных управляющих последовательностей; или использование дополнительного механизма помимо генерации символов. «Тупые» компьютерные терминалы обычно используют управляющие последовательности. В клавиатурах, подключенных к автономным персональным компьютерам , выпущенным в 1980-х годах, обычно используется один (или оба) из первых двух методов. Современные компьютерные клавиатуры генерируют скан-коды , которые идентифицируют конкретные нажимаемые физические клавиши; Затем компьютерное программное обеспечение определяет, как обрабатывать нажатые клавиши, включая любой из четырех методов, описанных выше.

Цель дизайна

Управляющие символы были разделены на несколько групп: управление печатью и отображением, структурирование данных, управление передачей и прочее.

Управление печатью и отображением

Символы управления печатью впервые использовались для управления физическим механизмом принтеров, самого раннего устройства вывода. Ранним примером этой идеи было использование цифр (FIGS) и букв (LTRS) в коде Бодо для переключения между двумя кодовыми страницами. Более поздним, но все же ранним примером были внеполосные символы управления кареткой ASA . Позже управляющие символы были интегрированы в поток данных для печати. Символ возврата каретки (CR) при отправке на такое устройство заставляет его помещать символ на край бумаги, с которого начинается запись (он также может перемещать, а может и не перемещать позицию печати на следующую строку). Символ перевода строки (LF/NL) заставляет устройство переносить позицию печати на следующую строку. Он может (или не может), в зависимости от устройства и его конфигурации, также перемещать позицию печати в начало следующей строки (которая будет крайней левой позицией для сценариев с письмом слева направо , таких как алфавиты, используемые для западных языков). языках и крайнее правое положение для написания справа налево, такого как иврит и арабский алфавит). Вертикальные и горизонтальные символы табуляции (VT и HT/TAB) заставляют устройство вывода перемещать позицию печати на следующую позицию табуляции в направлении чтения. Символ перевода страницы (FF/NP) начинает новый лист бумаги и может перемещаться или не перемещаться в начало первой строки. Символ возврата (BS) перемещает позицию печати на один символ назад. На принтерах, включая терминалы с печатными копиями , это чаще всего используется, чтобы принтер мог печатать символы поверх других, обычно недоступных, символов. На видеотерминалах и других электронных устройствах вывода часто существуют варианты конфигурации программного обеспечения (или аппаратного обеспечения), которые допускают деструктивный возврат (например, последовательность BS, SP, BS), который стирает, или неразрушающий, который не делает. Символы сдвига и сдвига (SI и SO) выбирают альтернативные наборы символов, шрифты, подчеркивание или другие режимы печати. Escape-последовательности часто использовались для того же самого.

С появлением компьютерных терминалов , которые физически не печатали на бумаге и поэтому предлагали большую гибкость в отношении размещения экрана, стирания и т. д., коды управления печатью были адаптированы. Например, подача форм обычно очищала экран, поскольку не было новой бумажной страницы, на которую можно было бы перейти. Более сложные escape-последовательности были разработаны, чтобы воспользоваться гибкостью новых терминалов и новых принтеров. Концепция управляющего персонажа всегда была несколько ограничивающей, особенно при использовании с новым, гораздо более гибким оборудованием. Управляющие последовательности (иногда реализованные как escape-последовательности) могли соответствовать новой гибкости и мощности и стали стандартным методом. Однако существовало и остается большое разнообразие стандартных последовательностей на выбор.

Структурирование данных

Разделители (Файл, Группа, Запись и Единица измерения: FS, GS, RS и US) были созданы для структурирования данных, обычно на ленте, с целью имитации перфокарт . Конец носителя (EM) предупреждает, что лента (или другой носитель записи) заканчивается. Хотя многие системы используют CR/LF и TAB для структурирования данных, в данных, которые необходимо структурировать, можно встретить управляющие символы-разделители. Управляющие символы-разделители не перегружаются; они не имеют общего применения, кроме как для разделения данных на структурированные группы. Их числовые значения соседствуют с символом пробела, который можно считать членом группы, в качестве разделителя слов.

Например, разделитель RS используется в RFC  7464 (текстовые последовательности JSON) для кодирования последовательности элементов JSON. Каждый элемент последовательности начинается с символа RS и заканчивается переводом строки. Это позволяет сериализовать открытые последовательности JSON. Это один из протоколов потоковой передачи JSON .

Управление коробкой передач

Символы управления передачей предназначались для структурирования потока данных и управления повторной передачей или корректным сбоем, при необходимости, в случае ошибок передачи.

Символ начала заголовка (SOH) должен был обозначать раздел потока данных, не содержащий данных, — часть потока, содержащую адреса и другие служебные данные. Начало текстового символа (STX) обозначало конец заголовка и начало текстовой части потока. Конец текстового символа (ETX) обозначал конец данных сообщения. Широко используемое соглашение состоит в том, чтобы сделать два символа, предшествующих ETX, контрольной суммой или CRC в целях обнаружения ошибок. Символ конца блока передачи (ETB) использовался для обозначения конца блока данных, где данные были разделены на такие блоки для целей передачи.

ESC-символ ( ESC ) предназначался для «цитирования» следующего символа; если это был другой управляющий символ, он печатал бы его вместо выполнения управляющей функции. Сегодня для этой цели он почти не используется. В качестве видимых « экранирующих символов » используются различные печатные символы , в зависимости от контекста.

Символ-заменитель ( SUB ) предназначался для запроса перевода следующего символа из печатного символа в другое значение, обычно путем установки бита 5 в ноль. Это удобно, поскольку некоторые носители (например, листы бумаги, напечатанные на пишущих машинках) могут передавать только печатные символы. Однако в системах MS-DOS с файлами, открытыми в текстовом режиме, «конец текста» или «конец файла» отмечается этим символом Ctrl-Z вместо Ctrl-C или Ctrl-D , которые распространены в других системах. операционные системы.

Символ отмены ( CAN ) сигнализировал, что предыдущий элемент должен быть отброшен. Символ отрицательного подтверждения ( NAK ) обычно является определенным флагом, указывающим на то, что при приеме возникла проблема, и часто на то, что текущий элемент следует отправить еще раз. Символ подтверждения ( ACK ) обычно используется в качестве флага, указывающего на отсутствие проблем с текущим элементом.

Когда среда передачи является полудуплексной (то есть она может передавать только в одном направлении одновременно), обычно имеется ведущая станция, которая может передавать в любое время, и одна или несколько ведомых станций, которые передают, когда у них есть разрешение. Символ запроса ( ENQ ) обычно используется главной станцией, чтобы попросить подчиненную станцию ​​отправить следующее сообщение. Подчиненная станция указывает, что она завершила передачу, отправляя символ окончания передачи ( EOT ).

Коды управления устройством (от DC1 до DC4) изначально были общими и должны были реализовываться по мере необходимости каждым устройством. Однако универсальная потребность в передаче данных состоит в том, чтобы попросить отправителя прекратить передачу, когда получатель временно не может принимать больше данных. Корпорация Digital Equipment изобрела соглашение, в котором использовалось 19 (3 ​​символа управления устройством ( DC3 ), также известное как control-S или XOFF ) для «S» верхней передачи, и 17 (1 символ управления устройством ( DC1 ), также известный как управление -Q или XON ), чтобы начать передачу. Он стал настолько широко использоваться, что большинство не осознает, что он не является частью официального ASCII. Несмотря на то, что этот метод реализован, он позволяет избежать дополнительных проводов в кабеле передачи данных, предназначенных только для управления передачей, что экономит деньги. Однако необходимо использовать разумный протокол для использования таких сигналов управления потоком передачи, чтобы избежать потенциальных тупиковых ситуаций.

Escape-символ канала передачи данных ( DLE ) был предназначен для передачи на другой конец канала передачи данных сигнала о том, что следующий символ является управляющим символом, например STX или ETX. Например, пакет может быть структурирован следующим образом ( DLE ) <STX> <PAYLOAD> ( DLE ) <ETX>.

Разные коды

Код 7 ( BEL ) предназначен для подачи звукового сигнала на приемном терминале. [6]

Многие управляющие символы ASCII были разработаны для устройств того времени, которые сегодня встречаются нечасто. Например, код 22, «синхронный простой» ( SYN ), изначально отправлялся синхронными модемами (которые должны постоянно отправлять данные), когда фактических данных для отправки не было. (Современные системы обычно используют стартовый бит для объявления начала передаваемого слова — это особенность асинхронной связи. Синхронные каналы связи чаще встречались на мэйнфреймах, где они обычно передавались по корпоративным выделенным линиям для соединения одного мэйнфрейма с другим. мэйнфрейм или, возможно, миникомпьютер.)

Код 0 (кодовое имя ASCII NUL ) представляет собой особый случай. В бумажной ленте это тот случай, когда дырок нет. Удобно рассматривать это как символ- заполнитель , не имеющий в противном случае никакого смысла. Поскольку в позиции NUL-символа нет дырок, его можно заменить любым другим символом позже, поэтому он обычно использовался для резервирования места либо для исправления ошибок, либо для вставки информации, которая будет доступна позже. или в другом месте. В вычислениях он часто используется для заполнения записей фиксированной длины ; отметить конец строки ; и раньше, чтобы дать печатающим устройствам достаточно времени для выполнения функции управления .

Код 127 ( DEL , он же «рубаут») также является особым случаем. Его 7-битный код содержит все биты в двоичном формате, что по существу стирает символьную ячейку на бумажной ленте при чрезмерной перфорации. Бумажная лента была распространенным носителем данных, когда был разработан ASCII, а история вычислений восходит к оборудованию для взлома кодов времен Второй мировой войны в Biuro Szyfrów . Бумажная лента устарела в 1970-х годах, поэтому после этого этот умный аспект ASCII редко использовался. Некоторые системы (например, оригинальные Apple) преобразовывали его в Backspace. Но поскольку его код находится в диапазоне, занимаемом другими печатными символами, и поскольку у него не было официального назначенного глифа, многие поставщики компьютерного оборудования использовали его в качестве дополнительного печатного символа (часто полностью черного символа «коробки», полезного для стирания текста путем наложения печати). с чернилами).

Нестираемые программируемые ПЗУ обычно реализуются как массивы плавких элементов, каждый из которых представляет бит , который можно переключать только в одну сторону, обычно от единицы до нуля. В таких PROM символы DEL и NUL могут использоваться так же, как они использовались на перфоленте: один для резервирования бессмысленных байтов заполнения, которые можно будет записать позже, а другой для преобразования записанных байтов в бессмысленные байты заполнения. Для PROM, которые переключают единицу на ноль, роли NUL и DEL меняются местами; кроме того, DEL будет работать только с 7-битными символами, которые сегодня используются редко; для 8-битного содержимого вместо DEL можно использовать код символа 255, обычно определяемый как символ неразрывного пробела.

Многие файловые системы не допускают использования управляющих символов в именах файлов , поскольку они могут иметь зарезервированные функции.

Смотрите также

Примечания и ссылки

  1. ^ Формат ASCII для сетевого обмена. 01.10.1969. дои : 10.17487/RFC0020 . РФК 20 . Проверено 5 апреля 2023 г.
  2. ^ «5.2 Управляющие символы» . Американский национальный стандартный код обмена информацией | ANSI X3.4-1977 (PDF) . Национальный институт стандартов. 1977. Архивировано (PDF) из оригинала 9 октября 2022 г.
  3. ^ Документация MS-DOS QBasic v1.1. Майкрософт 1987-1991.
  4. ^ «4.8 Имя». Стандарт Unicode версии 13.0 – Основная спецификация (PDF) . Unicode, Inc. Архивировано (PDF) из оригинала 9 октября 2022 г.
  5. ^ «Символы ASCII». Архивировано из оригинала 28 октября 2009 года . Проверено 8 октября 2010 г.
  6. ^ Формат ASCII для сетевого обмена. Октябрь 1969 г. doi : 10.17487/RFC0020 . РФК 20 . Проверено 3 ноября 2013 г.Старый RFC, в котором объясняется структура и значение управляющих символов в главах 4.1 и 5.2.

Внешние ссылки