Управляющий персонаж
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2007 г. ) |
В вычислительной технике и телекоммуникациях управляющий символ или непечатаемый символ ( NPC ) — это кодовая точка в наборе символов , которая не представляет собой письменный символ или символ. Они используются в качестве внутриполосной сигнализации для создания эффектов, отличных от добавления символа в текст. Все остальные символы в основном являются графическими символами , также известными как печатные символы (или печатные символы ), за исключением, возможно, символов « пробела ». В стандарте ASCII имеется 33 управляющих символа, например код 7, BEL , который звонит в концевой звонок.
История
[ редактировать ]Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( январь 2009 г. ) |
Процедурные знаки в азбуке Морзе являются формой управляющего символа.
1870 года была введена форма управляющих символов В коде Бодо : NUL и DEL. 1901 года В код Мюррея были добавлены возврат каретки (CR) и перевод строки (LF), а другие версии кода Бодо включали другие управляющие символы.
Символ колокольчика (BEL), который звонил в колокольчик для оповещения операторов, также был одним из первых телетайпа управляющих символов .
Некоторые управляющие символы также называются «эффекторами формата».
В ASCII
[ редактировать ]Было определено довольно много управляющих символов (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.
0x00 | 0x10 | |
---|---|---|
0x00 | НУЛЕВОЙ | В СООТВЕТСТВИИ С |
0x01 | СОХ | DC1 |
0x02 | СТХ | DC2 |
0x03 | И Т. Д | DC3 |
0x04 | EOT | DC4 |
0x05 | ENQ | ХОТЕТЬ |
0x06 | ПОДТВЕРЖДЕНИЕ | СИН |
0x07 | БЕЛ | ЭТБ |
0x08 | БС | МОЖЕТ |
0x09 | ХТ | В |
0x0A | НЧ | СУБ |
0x0B | ВТ | ЭКУ |
0x0C | ФФ | ФС |
0x0D | ЧР | GS |
0x0E | ТАК | РС |
0x0F | И | НАС |
0x7F | ПРИНАДЛЕЖАЩИЙ |
Управляющие символы в ASCII, которые все еще широко используются, включают:
- 0x00 ( ноль , НУЛЕВОЙ , \0 , ^@ ), изначально предназначался для игнорируемого символа, но теперь используется во многих языках программирования, включая C, для обозначения конца строки .
- 0x07 ( звонок , БЕЛ , \а , ^G ), что может привести к тому, что устройство издаст предупреждение, например, в виде звонка или звукового сигнала или мигания экрана.
- 0x08 ( пробел , БС , \б , ^H ), может перепечатать предыдущий символ.
- 0x09 ( горизонтальная табуляция , ХТ , \ т , ^I ), перемещает позицию печати вправо до следующей позиции табуляции.
- 0x0A ( перевод строки , ЛФ , \п , ^J ), перемещает печатающую головку на одну строку вниз или влево и вниз. Используется как маркер конца строки в большинстве систем и вариантов UNIX.
- 0x0B ( вертикальная табуляция , ВТ , \v , ^K ), вертикальная табуляция.
- 0x0C ( подача формы , ФФ , \ф , ^L ), чтобы принтер выбросил бумагу в начало следующей страницы, или видеотерминал очистил экран.
- 0x0D ( возврат каретки , ЧР , \р , ^M ), перемещает позицию печати в начало строки, позволяя накладывать печать. Используется как маркер конца строки в Classic Mac OS , OS-9 , FLEX (и вариантах). А Пара CR+LF используется CP/M -80 и его производными, включая DOS и Windows , а также прикладного уровня протоколами , такими как FTP , SMTP и HTTP .
- 0x1A ( Control-Z , СУБ , ^З ). Действует как конец файла для ввода-вывода текстового файла Windows.
- 0x1B ( побег , ЭСК , \e ( только GCC ), ^[ ). Вводит escape-последовательность .
Управляющие символы могут быть описаны как выполняемые при их вводе пользователем, например, код 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 :
- Кодовая точка : десятичная 7, шестнадцатеричная 0x07.
- Аббревиатура, часто состоящая из трех заглавных букв: БЕЛ.
- Специальный символ, сокращающий аббревиатуру: Unicode U+2407 (␇), «символ колокольчика».
- Графическое представление ISO 2047 : Unicode U + 237E (⍾), «графика звонка».
- Обозначение каретки в ASCII, где кодовая точка 00xxxxxx представлена в виде каретки, за которой следует заглавная буква в кодовой точке 10xxxxx: ^G
- , Escape-последовательность как в C / C++ : кодах строк символов \а , \007 , \x07 и т. д.
Как управляющие символы отображаются на клавиатуре
[ редактировать ]на основе 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, обычно определяемый как символ неразрывного пробела.
Многие файловые системы не допускают использования управляющих символов в именах файлов , поскольку они могут иметь зарезервированные функции.
См. также
[ редактировать ]- Клавиши со стрелками § Клавиши HJKL , HJKL в качестве клавиш со стрелками, используются на терминале ADM-3A
- Коды управления C0 и C1
- Escape-последовательность
- Внутриполосная сигнализация
- Пробелный символ
Примечания и ссылки
[ редактировать ]- ^ Формат ASCII для сетевого обмена . 01.10.1969. дои : 10.17487/RFC0020 . РФК 20 . Проверено 5 апреля 2023 г.
- ^ «5.2 Управляющие символы». Американский национальный стандартный код обмена информацией | ANSI X3.4-1977 (PDF) . Национальный институт стандартов. 1977. Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ Документация MS-DOS QBasic v1.1. Майкрософт 1987-1991.
- ^ «4.8 Имя». Стандарт Unicode версии 13.0 – Основная спецификация (PDF) . Unicode, Inc. Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ «Символы ASCII» . Архивировано из оригинала 28 октября 2009 года . Проверено 8 октября 2010 г.
- ^ Формат ASCII для сетевого обмена . Октябрь 1969 г. doi : 10.17487/RFC0020 . РФК 20 . Проверено 3 ноября 2013 г. Старый RFC, в котором объясняется структура и значение управляющих символов в главах 4.1 и 5.2.
Внешние ссылки
[ редактировать ]- ISO IR 1 C0 Набор ISO 646 (PDF)