Формат ascii что это
ASCII – путеводитель для новичков
Что это такое?
ASCII представляет собой кодировочную таблицу печатных символов (см. скриншот №1), набираемых на компьютерной клавиатуре, для передачи информации и некоторых кодов. Иными словами происходит кодирование алфавита и десятичных цифр в соответствующие символы, представляющие и несущие в себе необходимую информацию.
Кодировка ASCII была разработана в Америке, поэтому стандартная кодировочная таблица обычно включает в себя английский алфавит с цифрами, что в общей сложности составляет около 128 символов. Но тогда возникает справедливый вопрос: что делать, если необходима кодировка национального алфавита?
Где применяется система кодировки ASCII?
Данная кодировочная система необходима не только для набора текстовой информации на клавиатуре. Она также используется в графике. Например, в программе ASCII Art Maker графические изображения различных расширений состоят из спектра символов кодировки ASCII (см. скриншот №3).
Данный метод кодировки также может быть востребован во время написания или создания документа HTML. Например, вы вводите определённый и необходимый вам набор знаков, а при просмотре самой страницы на экран будет выведен символ, соответствующий данному коду.
Кроме всего прочего данный вид кодировки необходим при создании многоязычного сайта, потому что знаки, которые не входят в ту или иную национальную таблицу, нужно будет заменить ASCII кодами. Если читатель непосредственно связан с информационно-коммуникативными технологиями (ИКТ), то ему будет полезно ознакомиться и с такими системами как:
Свойства таблицы ASCII
Как и любая систематизированная программа, ASCII обладает своими характерными свойствами. Так, например, десятеричная система исчисления (цифры от 0 до 9) преобразуется в двоичную систему исчисления (т.е. каждая десятеричная цифра преобразуется в двоичную 288=1001000 соответственно).
Буквы, располагающиеся в верхних и нижних колонках, отличаются друг от друга лишь битом, что существенно снижает уровень сложности проверки и редактирование регистра.
При всех этих свойствах кодировка ASCII работает как восьми битная, хотя изначально предусматривалась как семи битная.
Применение ASCII в программах Microsoft Office:
В частности, будет недоступно выделение жирным и полужирным шрифтом, потому что кодирование сохраняет лишь смысл набранной информации, а не общий вид и форму. Добавить такие коды в документ вы можете с помощью следующих программных приложений:
При этом стоит учитывать, что набирая код ASCII в этих приложениях необходимо удерживать нажатой клавиатурную клавишу ALT.
Конечно, все необходимые коды требует более длительного и обстоятельного изучения, но это выходит за пределы нашей сегодняшней статьи. Надеюсь, что она оказалась для Вас действительно полезной.
Решайтесь на великие поступки — ASCII
ASCII — это самый простой из существующих коммуникационных протоколов и единственный формат данных, который может декодировать любая из существующих компьютерных систем.
Момент посадки на Марс ровера NASA Perseverance (Настойчивость) стал историческим событием. Человечество впервые увидело нечто подобное. Многие люди с замиранием сердца наблюдали за происходящим. «Настойчивость» многие годы будет служить для нас источником вдохновения.
Каждое изображение, поступающее с Марса после успешной посадки ровера, содержало в себе какой-то сюрприз. Одним из таких сюрпризов стало сообщение, зашифрованное в раскраске парашюта марсохода.
Интернет-ищейки заявили о том, что им удалось расшифровать скрытое сообщение, нанесённое на купол парашюта, который помог роверу безопасно приземлиться на поверхность Красной планеты. Как оказалось, фраза «Dare Mighty Things» («Решайтесь на великие поступки») — девиз лаборатории реактивного движения NASA (Jet Propulsion Laboratory) — была закодирована на парашюте с использованием красных и белых полос, представляющих двоичный компьютерный код. Этот код, что неудивительно, можно, используя некоторые вычисления, перевести в кодировку ASCII и, в итоге, понять то, что в нём скрыто.
Ровер сделал этот снимок парашюта в процессе посадки на поверхность Марса
Пользователи Reddit и Twitter обратили внимание на то, что красно-белый узор похож на нечто, способное нести в себе какой-то смысл. Они расшифровали послание, решив, что красные фрагменты представляют единицы, а белые — нули.
Эта история разлетелась по всему миру, благодаря ей кодировка ASCII, о которой говорят не особенно часто, оказалась у всех на слуху.
В этом материале мы поговорим об ASCII, немного коснёмся истории этой кодировки, разберём пример её применения в программном коде. Прочитав эту статью, вы поймёте, что очень сложно не полюбить ASCII, кое-что о ней узнав.
Протокол ASCII
ASCII — это кодировка. Это не протокол. Протоколы могут быть построены на основе ASCII.
На самом деле, так оно и есть, но во множестве документов, которые можно встретить в интернете, ASCII называют не только «кодировкой», но и «протоколом». Поэтому я заранее хочу обратить на это ваше внимание, так как могу называть ASCII и так и так.
ASCII можно назвать самым простым коммуникационным протоколом для передачи текста. При его использовании передаются только обычные и управляющие ASCII-символы. Он предусматривает минимальный контроль ошибок или полное его отсутствие.
Может, в это сложно поверить, но ASCII — это весьма мощная технология. Это — единственный формат данных, который может декодировать любая из существующих компьютерных систем.
Немногие знают о том, что кодировка ASCII появилась в 1960-х годах, когда Лабораториям Белла (Bell Labs) понадобился стандартный способ для передачи текста. Сотрудники Bell Labs реорганизовали телеграфные коды, разобрали их и, совместно с Американской ассоциацией стандартов (American Standards Association, ASA), сформировали ASCII (American Standard Code for Information Interchange, Американский стандартный код для обмена информацией). 1960-е — это время бурного развития компьютерных технологий. Создатели вычислительных машин использовали ASCII. В результате эта кодировка и стала общепризнанным стандартом передачи информации.
Почему вокруг так много всего связано с ASCII? Дело в том, что это отражает то, как люди общаются друг с другом. Для общения мы используем буквы, цифры и специальные символы. В мире, например, очень много всего такого, что надо как-то маркировать. Речь идёт о товарных этикетках, о коробках, об автомобильных покрышках, и много о чём ещё. Компьютеры должны считывать маркировку, что они и делают, используя сканеры штрих-кодов. Потом, если речь идёт о штрих-кодах, их надо преобразовать в ASCII-символы, с которыми уже выполняются дальнейшие действия.
Типичный пример использования ASCII — это составление команд и запросов, которые можно отправлять промышленным устройствам, которые, реагируя на них, выполняют какие-то действия, или отправляют в ответ сведения о собственном состоянии.
Что такое протокол?
Представим, что вы попали на аудиенцию к королеве. При этом кто-то из дворцовых служащих сообщает вам о том, каких правил принято придерживаться во время этого мероприятия. Эти правила и называют протоколом. Понятие «протокол» часто используется в компьютерном мире. Вы вводите веб-адрес в адресную строку браузера, нажимаете Enter, это приводит к выполнению множества операций, браузер и сервер обмениваются данными, после чего запрошенная страница выводится на экране. В ходе обмена данными между сервером и браузером используется определённый набор протоколов.
Понятие «сетевой протокол» скрывает в себе множество смысловых уровней. Обычно «протокол» — это механизм, используемый для передачи пакетов с данными между компьютерами. Но тут мы не будем обращать внимание на транспортную составляющую обмена данными. Мы сосредоточимся на исследовании тех данных, которые передаются по сетям. В частности — изучим сообщения, которые программы отправляют другим программам.
Биты, байты и представление информации
Итак, мы уже немного поговорили об ASCII, а ниже я продемонстрирую примеры работы с ASCII в коде. Но прежде чем я это сделаю, предлагаю немного отклониться от нашей основной темы и поговорить о том, как в цифровом мире кодируется и хранится информация.
«Цифровое представление информации» — это когда всё что угодно представляют исключительно с помощью чисел. Обычная последовательность работы при таком подходе выглядит так:
Двоичные, восьмеричные, десятичные, шестнадцатеричные числа
Существует множество способов представления чисел. Например, возьмём двоичное число 10011111.
Оно равнозначно следующим числам:
Для того чтобы передавать данные по компьютерным сетям эти данные надо представлять в виде байтов. Байт — это группа из 8 битов. С помощью одного байта можно закодировать десятичное число в диапазоне от 0 до 255.
Эта конструкция используется для представления неких данных. Ведь, как известно, компьютер не может хранить «буквы», «цифры», «изображения» или что угодно другое. Компьютер может работать лишь с битами. А бит может пребывать лишь в одном из двух значений: «да» или «нет», «истина» или «ложь», «0» или «1». Называть их можно по-разному, но всё сводится к тому, что их всего два.
Для того чтобы использовать биты для представления чего-то, отличного от «нулей» и «единиц», нужны некие правила. Нужна возможность преобразовывать последовательности битов в нечто вроде букв, цифр, изображений. Делается это с применением некоей схемы кодирования, которую обычно называют просто «кодировкой».
Тут мы говорим о схеме кодирования ASCII. В этой кодировке определено 128 символов (для кодирования 1 символа используется 7 битов). Ниже приведён её фрагмент.
Биты | Символы |
1000001 | A |
1000010 | B |
1000011 | C |
1000100 | D |
1000101 | E |
1000110 | F |
Фактически, при использовании ASCII работа ведётся не с «символами» или с «текстами». Всё сводится к манипулированию битами, «видимыми» через несколько слоёв абстракции.
Помимо ASCII существуют и другие способы кодирования символов, другие способы преобразования последовательностей битов в текстовые данные. Например, это набор символов Unicode. Если имеется соответствие между битами, из которых составлена строка, и кодами Unicode-символов — битовое представление строки можно преобразовать в нечто осмысленное. Если такого соответствия нет — подобное преобразование выполнить не получится.
Для преобразования двоичных данных в числа, которые соответствуют номерам из набора символов Unicode (и для преобразования кодов символов в двоичные данные), могут применяться различные кодировки. В частности, это кодировка UTF-8. Она совместима с ASCII, для представления ASCII-символов в ней применяются 1-байтные коды. Для представления символов из набора Unicode в ней может применяться до 4 байтов на 1 символ.
Если две компьютерные системы обмениваются друг с другом данными, им нужно договориться о том, какую именно кодировку они используют. Например, текстовые данные, представленные на этой странице, закодированы с использованием UTF-8, о чём сервер, передавший страницу, сообщает браузеру, который её принял и вывел на экран.
STX / ETX (протокол ASCII)
Помните вышеприведённую конструкцию? Повторим её ещё раз:
Сокращения STX и ETX обычно используются для обозначения управляющих символов ASCII. У них нет графического представления, они не могут быть выведены на экран, поэтому там, где они используются, обычно применяют их сокращённые наименования. На практике они заменяются на соответствующие ASCII-символы. А именно, STX заменяется на ASCII-символ с кодом 0x02, а ETX — на символ с кодом 0x03.
В записи кодов управляющих символов использована конструкция 0x. Она указывает на применение шестнадцатеричных кодов. Например, 0x01 — это, в десятичном представлении, 1, а в двоичном — 00000001. 0x10 — это 16 в десятичном представлении и 00010000 в двоичном.
С помощью управляющих символов STX (Start of TeXt, начало текста) и ETX (End of TeXt, конец текста) можно сформировать простой пакет, в который упаковываются пользовательские данные. В таком пакете, помимо признаков начала и конца текста, присутствует контрольная сумма (checksum), которая позволяет организовать надёжную передачу данных. Возможно, вы видели подобные конструкции в коде, предназначенном для обмена данными с некими устройствами по сети или через порт RS232.
Пример кода: отправка ASCII-команд через TCP/IP
Исходя из предположения о том, что у нас уже имеется установленное сетевое соединение, нам, для организации обмена данными между программами, нужно всего лишь отправить по этому соединению соответствующую строку. При этом, например, символ STX будет представлен в виде ‘\x02’, а передача H — в виде ‘\x02H\x04’.
ASCII-команды можно отправлять с использованием различных каналов связи. В моём примере будет использован TCP-канал. Пример написан на C# (мы рассмотрим и JavaScript-пример, рассчитанный на платформу Node.js). Этот код будет понятен и тем, кто знает Java.
▍Обзор проекта
Итак, мы будем разрабатывать простое клиент-серверное TCP-приложение.
Вот пример выходных данных, генерируемых в ходе работы нашей клиент-серверной системы.
Пример работы клиент-серверной системы
▍И что всё это значит?
Если вы задались вопросом, который вынесен в заголовок этого раздела — знайте, что меня это порадовало. Сейчас я всё это объясню, прибегнув к фрагментам кода моего приложения. Его полную версию, с которой вы можете поэкспериментировать самостоятельно, можно найти в этом репозитории на GitHub.
▍TCP-клиент
AsciiDemo.TestApp — это наш TCP-клиент. Вот его код (файл Program.cs ):
Код класса Program
Метод Main является точкой входа в приложение.
Этот код устроен очень просто, но если у вас есть по нему вопросы — можете задать их мне. Здесь мы сначала подготавливаем некоторые команды, используя кодировку ASCII, затем преобразуем их в байты и отправляем по сети TCP-серверу. Тут же мы выводим сообщения в консоль.
Сеанс связи с точки зрения клиента
Обратите внимание на то, что мы получаем от сервера подтверждения (ACK/NAK) о получении данных (об этом мы поговорим ниже). В результате оказывается, что наш TCP-клиент может не только отправлять команды серверу, но и получать от сервера ответы.
В консоли можно видеть некоторые необычные символы. Это — визуальные представления управляющих символов, о которых мы говорили выше.
Код метода BuildCommand
▍TCP-сервер
AsciiDemo.TCPListenerApp — это простейший TCP-сервер. Он прослушивает заданный порт, ожидая поступления команд. После получения команды он просто выводит её в консоль (если подобные команды используются для управления неким устройством — оно может, например, выключиться, или прочесть показания некоего датчика), а затем отправляет ответ. В данном случае выполняется отправка ответов ACK или NAK, имитирующих, соответственно, успешное или неудачное выполнение команды. Если нужно — можно организовать любую другую реакцию сервера на подобные команды.
Вот как выглядит то, что выводит в консоль сервер.
Сеанс связи с точки зрения сервера
Как видно, каждый раз, получая команду от клиента, сервер выводит её в консоль, а после этого отправляет клиенту ACK или NAK. То, что происходит в это время на клиенте, мы уже видели.
Вот код метода Main TCP-сервера:
Тут всё устроено очень просто. Сначала мы запускаем сервер на заданном IP-адресе и порте, а потом сервер, в соответствующем цикле, ждёт поступления данных. Вот код этого цикла.
Цикл, используемый в работе сервера
Байты мы преобразуем в ASCII-символы, выводим их в консоль, а после этого отправляем клиенту байты, соответствующие кодам управляющих символов ACK или NAK.
Получение данных от клиента и отправка ему ответа
▍Node.js-реализация клиента
Как уже было сказано, подобный функционал можно реализовать и с использованием других языков программирования. Вот, например, вариант реализации простого TCP-клиента для платформы Node.js.
TCP-клиент для Node.js
Вот что выведет в консоль клиент.
Сеанс связи с точки зрения Node.js-клиента
Клиент подключается к серверу, отправляет ему две команды и выводит ACK/NAK-ответы сервера.
Сервер получает команды от клиента и отправляет ему ответы.
Итоги
Полагаю, что ASCII — это просто потрясающе. Это простая и мощная кодировка, на основе которой несложно создавать коммуникационные протоколы. И она будет актуальна до тех пор, пока люди общаются, используя буквы и цифры.
Использование ASCII при составлении команд и запросов восходит к временам ранних мейнфреймов IBM, при работе с которыми применялись терминалы. Оператор вводил на терминале команды и нажимал на клавишу Return для отправки их компьютеру. Все взаимодействия с этими компьютерами, так как работали с ними люди, были основаны на стандартном ASCII.
Везде, где используется некая маркировка чего-либо, применяется ASCII. Например, каждый сканер штрих-кодов, в сущности, работает с последовательностями ASCII-символов. Эти символы где-то хранятся, их нужно распечатывать, иногда их надо преобразовывать в числовые данные.
Даже сегодня, когда в нашем распоряжении имеются современные протоколы для промышленных устройств, ASCII не теряет актуальности. И так будет ещё очень и очень долго.
Приходилось ли вам создавать собственные реализации протоколов, основанных на ASCII и применяемых для обмена данными с некими устройствами?
ASCII
ASCII (англ. American Standard Code for Information Interchange ) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].
ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной кодовой таблицы (например КОИ-8 ).
Содержание
Наложение символов
Благодаря символу BS (возврат на шаг) на принтере можно печатать один символ поверх другого. В ASCII было предусмотрено добавление таким образом диакритики к буквам, например:
Примечание: в старых шрифтах апостроф ‘ рисовался с наклоном влево, а тильда
была сдвинута вверх, так что они как раз подходили на роль акута и тильды сверху.
Если на символ накладывается тот же символ, то получается эффект жирного шрифта, а если на символ накладывается подчёркивание, то получается подчёркнутый текст.
Национальные варианты ASCII
Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ `
. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант ASCII без национальных символов называется US-ASCII, или «International Reference Version».
В Юникоде первые 128 символов тоже совпадают с соответствующими символами US-ASCII.
Кодировка
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | TAB | LF | VT | FF | CR | SO | SI | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2. | ! | « | # | $ | % | & | ‘ | ( | ) | * | + | , | — | . | / | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5. | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6. | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7. | p | q | r | s | t | u | v | w | x | y | z | < | | | > |
.0 | .1 | .2 | .3 | .4 | .5 | .6 | .7 | .8 | .9 | .A | .B | .C | .D | .E | .F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0. | NUL | SOM | EOA | EOM | EQT | WRU | RU | BELL | BKSP | HT | LF | VT | FF | CR | SO | SI |
1. | DC0 | DC1 | DC2 | DC3 | DC4 | ERR | SYNC | LEM | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 |
2. | ||||||||||||||||
3. | ||||||||||||||||
4. | BLANK | ! | « | # | $ | % | & | ‘ | ( | ) | * | + | , | — | . | / |
5. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | ? | |||
6. | ||||||||||||||||
7. | ||||||||||||||||
8. | ||||||||||||||||
9. | ||||||||||||||||
A. | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
B. | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ↑ | ← |
C. | ||||||||||||||||
D. | ||||||||||||||||
E. | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |
F. | p | q | r | s | t | u | v | w | x | y | z | ESC | DEL |
На тех компьютерах, где минимально адресуемой единицей памяти было 36-битное слово, поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа.
ASCII-коды используются также для определения нажатой клавиши при программировании. Для стандартной QWERTY-клавиатуры таблица кодов выглядит следующим образом:
- Формат asc чем открыть
- Формат asd чем открыть