
Таблица ASCII: коды символов простыми словами
Таблица ASCII — список из 128 позиций, где каждому символу присвоено своё число. Латинская A — это 65. Цифра 0 — 48. Пробел — 32. Переход на новую строку — 10. Компьютер не хранит буквы: он хранит числа и по этой таблице решает, какую закорючку нарисовать на экране.
Стандарту шестьдесят с лишним лет, а он до сих пор лежит в основании почти всего, что вы печатаете: HTML, почта, адреса сайтов, команды принтеров этикеток, содержимое штрих-кода Code 128. Ниже — таблица целиком, разбор диапазонов, арифметика кодов и места, где знание ASCII экономит время.
Что такое ASCII и почему в ней ровно 128 символов
ASCII расшифровывается как American Standard Code for Information Interchange — американский стандартный код для обмена информацией. Первую редакцию опубликовали в 1963 году, крупную переработку — в 1967-м, финальная версия зафиксирована как ANSI X3.4-1986. Задача была прозаичная: до стандарта каждый производитель телетайпов держал свою кодировку, и текст с одного аппарата на другом превращался в мусор.
Откуда взялось число 128
ASCII семибитная. Семь двоичных разрядов дают 2 в седьмой степени — ровно 128 комбинаций, от 0000000 до 1111111. Отсюда диапазон номеров 0–127, ни одним больше.
Почему не восемь бит, если байт состоит из восьми? Когда стандарт создавали, каждый бит стоил денег: линии медленные, память дорогая. Семи разрядов хватало на английский алфавит в двух регистрах, цифры, пунктуацию и служебные команды. Восьмой оставили под контроль чётности — примитивную проверку на одиночную ошибку передачи.
Из чего состоит таблица
- 33 управляющих символа — коды 0–31 и код 127. Это не знаки, а команды: перевод строки, возврат каретки, табуляция, звонок, конец передачи.
- 95 печатаемых символов — коды 32–126. Пробел, знаки препинания, цифры, латиница в верхнем и нижнем регистре.
33 плюс 95 — те самые 128 позиций. Кириллицы, умляутов и эмодзи в ASCII нет и быть не может: места не хватает.
Структура: четыре блока по 32 символа
Запоминать 128 строк незачем: таблица делится на четыре блока по 32 позиции, и внутри каждого порядок логичен.
| Блок | Dec | Hex | Содержимое |
|---|---|---|---|
| 0 | 0–31 | 00–1F | Управляющие символы, не печатаются |
| 1 | 32–63 | 20–3F | Пробел, пунктуация, цифры 0–9, символы :;<=>? |
| 2 | 64–95 | 40–5F | @, заглавные A–Z, скобки [\]^_ |
| 3 | 96–127 | 60–7F | Обратный апостроф, строчные a–z, {|}~, DEL |
Отсюда видно две вещи. Заглавные буквы начинаются с 65, строчные — с 97, разница ровно 32. Цифры лежат подряд с 48, поэтому символ цифры превращается в число вычитанием.
Управляющие символы: коды 0–31 и 127
Первые 32 позиции придумывали для телеграфных аппаратов, и половина названий звучит как археология. Но десяток кодов из блока вы используете ежедневно — нажимая Enter или Tab.
| Dec | Hex | Обозначение | Что делает |
|---|---|---|---|
| 0 | 00 | NUL | Нулевой символ. В языке C — признак конца строки |
| 1 | 01 | SOH | Начало заголовка сообщения |
| 2 | 02 | STX | Начало текста |
| 3 | 03 | ETX | Конец текста. В терминале это Ctrl+C |
| 4 | 04 | EOT | Конец передачи. Ctrl+D в консоли |
| 5 | 05 | ENQ | Запрос «ты на связи?» |
| 6 | 06 | ACK | Подтверждение приёма |
| 7 | 07 | BEL | Звуковой сигнал, терминал пищит до сих пор |
| 8 | 08 | BS | Backspace, шаг назад |
| 9 | 09 | HT | Горизонтальная табуляция — клавиша Tab |
| 10 | 0A | LF | Перевод строки. В Linux и macOS — конец строки |
| 11 | 0B | VT | Вертикальная табуляция |
| 12 | 0C | FF | Перевод страницы, команда принтеру «новый лист» |
| 13 | 0D | CR | Возврат каретки в начало строки |
| 14 | 0E | SO | Переключение на другой набор знаков |
| 15 | 0F | SI | Возврат к основному набору |
| 16 | 10 | DLE | Экранирование в канале передачи данных |
| 17 | 11 | DC1 | Он же XON — возобновить передачу |
| 18 | 12 | DC2 | Управление устройством 2 |
| 19 | 13 | DC3 | Он же XOFF — приостановить передачу |
| 20 | 14 | DC4 | Управление устройством 4 |
| 21 | 15 | NAK | Приём с ошибкой, отрицательное подтверждение |
| 22 | 16 | SYN | Синхронизация при простое линии |
| 23 | 17 | ETB | Конец блока передачи |
| 24 | 18 | CAN | Отмена предыдущих данных |
| 25 | 19 | EM | Конец носителя, кончилась лента |
| 26 | 1A | SUB | Замена испорченного символа. В DOS — конец файла |
| 27 | 1B | ESC | Escape, начало управляющей последовательности |
| 28 | 1C | FS | Разделитель файлов |
| 29 | 1D | GS | Разделитель групп |
| 30 | 1E | RS | Разделитель записей |
| 31 | 1F | US | Разделитель полей |
| 127 | 7F | DEL | Удаление символа |
Почему DEL стоит в конце таблицы
Код 127 в двоичном виде — 1111111, все семь разрядов подняты. Данные набивали на перфоленте, где единица означала пробитое отверстие. Ошиблись в символе — прогоняли ленту назад и пробивали все семь дырок подряд: восстановить бумагу нельзя, а пометить позицию как мусор можно. Считыватель видел 127 и пропускал её.
Какие управляющие коды работают сегодня
Половина блока осталась в шестидесятых вместе с телетайпами. Но семь кодов живут в повседневной работе, и каждый хотя бы раз портил кому-то день.
- LF (10) и CR (13) — конец строки. Windows завершает строку парой CR+LF, Linux и macOS — одним LF, классическая Mac OS до версии X ставила одиночный CR. Отсюда лесенка вместо ровного текста, хвосты
^Mв diff и ошибкаbad interpreter: shell-скрипт сохранили в Windows, и первая строка получила лишний невидимый байт 13. - HT (9) — табуляция. Разделитель колонок в TSV, обязательный отступ в правилах Makefile и частый способ развалить разбор выгрузки, когда символ попал внутрь значения.
- ESC (27) — начало управляющей последовательности. С него стартуют команды ESC/POS для чековых принтеров:
ESC @сбрасывает настройки,GS Vотрезает чек. По той же логике устроены ANSI-коды, красящие текст в терминале. - GS (29) — разделитель групп. В кодах маркировки GS1 отделяет поля переменной длины, а при копировании в текстовый редактор невидим — строка выглядит склеенной.
- NUL (0) — нулевой байт. В языке C он закрывает строку, поэтому текст обрывается там, где встретился ноль; отсюда старый класс уязвимостей с обрезанием пути к файлу.
- DC1 и DC3 (17 и 19) — они же XON и XOFF, программное управление потоком. Живут в настройках всего, что общается по последовательному порту: сканеры штрих-кодов, весы, контроллеры. Неверный flow control — классическая причина, по которой сканер отдаёт половину строки.
- FS, GS, RS, US (28–31) — иерархия разделителей: файл, группа, запись, поле. Задумка шестидесятых встречается в форматах обмена, где данные надо разложить по уровням без запятых и кавычек.
Печатаемые символы: пунктуация, цифры, латиница
С кода 32 начинается видимая часть таблицы. Первым идёт пробел — полноценный символ, а не отсутствие символа.
Коды 32–47
| Dec | Hex | Символ | Название |
|---|---|---|---|
| 32 | 20 | (пробел) | Space |
| 33 | 21 | ! | Восклицательный знак |
| 34 | 22 | " | Двойная кавычка |
| 35 | 23 | # | Решётка, хеш |
| 36 | 24 | $ | Доллар |
| 37 | 25 | % | Процент |
| 38 | 26 | & | Амперсанд |
| 39 | 27 | ' | Апостроф |
| 40 | 28 | ( | Открывающая скобка |
| 41 | 29 | ) | Закрывающая скобка |
| 42 | 2A | * | Звёздочка |
| 43 | 2B | + | Плюс |
| 44 | 2C | , | Запятая |
| 45 | 2D | - | Дефис, минус |
| 46 | 2E | . | Точка |
| 47 | 2F | / | Прямой слеш |
Обратите внимание на код пробела в шестнадцатеричном виде — 20. Отсюда растёт %20 в веб-адресах.
Цифры 48–57 и символы 58–64
| Dec | Hex | Символ | Dec | Hex | Символ |
|---|---|---|---|---|---|
| 48 | 30 | 0 | 57 | 39 | 9 |
| 49 | 31 | 1 | 58 | 3A | : |
| 50 | 32 | 2 | 59 | 3B | ; |
| 51 | 33 | 3 | 60 | 3C | < |
| 52 | 34 | 4 | 61 | 3D | = |
| 53 | 35 | 5 | 62 | 3E | > |
| 54 | 36 | 6 | 63 | 3F | ? |
| 55 | 37 | 7 | 64 | 40 | @ |
| 56 | 38 | 8 |
Шестнадцатеричные коды цифр устроены изящно: 0 — это 0x30, 9 — 0x39. Младший разряд hex-кода совпадает с самой цифрой, поэтому в дампе памяти строку из цифр видно с первого взгляда: подряд идут байты 30-х. Как читаются такие записи и откуда в них буквы A–F — в разборе шестнадцатеричной системы.
Латиница: 65–90 и 97–122
| Заглавная | Dec | Hex | Строчная | Dec | Hex |
|---|---|---|---|---|---|
| A | 65 | 41 | a | 97 | 61 |
| B | 66 | 42 | b | 98 | 62 |
| C | 67 | 43 | c | 99 | 63 |
| D | 68 | 44 | d | 100 | 64 |
| E | 69 | 45 | e | 101 | 65 |
| F | 70 | 46 | f | 102 | 66 |
| G | 71 | 47 | g | 103 | 67 |
| H | 72 | 48 | h | 104 | 68 |
| I | 73 | 49 | i | 105 | 69 |
| J | 74 | 4A | j | 106 | 6A |
| K | 75 | 4B | k | 107 | 6B |
| L | 76 | 4C | l | 108 | 6C |
| M | 77 | 4D | m | 109 | 6D |
| N | 78 | 4E | n | 110 | 6E |
| O | 79 | 4F | o | 111 | 6F |
| P | 80 | 50 | p | 112 | 70 |
| Q | 81 | 51 | q | 113 | 71 |
| R | 82 | 52 | r | 114 | 72 |
| S | 83 | 53 | s | 115 | 73 |
| T | 84 | 54 | t | 116 | 74 |
| U | 85 | 55 | u | 117 | 75 |
| V | 86 | 56 | v | 118 | 76 |
| W | 87 | 57 | w | 119 | 77 |
| X | 88 | 58 | x | 120 | 78 |
| Y | 89 | 59 | y | 121 | 79 |
| Z | 90 | 5A | z | 122 | 7A |
Остальные позиции — служебные знаки вокруг алфавитов: 91 [, 92 \, 93 ], 94 ^, 95 _, 96 обратный апостроф, 123 {, 124 |, 125 }, 126 тильда.
Арифметика таблицы: три приёма
Порядок символов выбирали не случайно, и из него вытекают трюки, которыми программисты пользуются полвека.
Смена регистра — это один бит. Разница между заглавной и строчной буквой всегда 32, а 32 в двоичном виде — 100000, один-единственный разряд. Классическая реализация «привести к нижнему регистру» в старом коде — операция ИЛИ с числом 0x20, к верхнему — И с 0xDF. Работает мгновенно и только для латиницы; на кириллице фокус рассыпается.
Символ цифры превращается в число вычитанием 48. Символ 7 хранится как байт 55, настоящая семёрка получается вычитанием кода нуля: 55 − 48 = 7. На этом построен любой ручной разбор числа из строки.
Сортировка по коду не равна сортировке по алфавиту. Блок 65–90 расположен раньше блока 97–122, поэтому наивная сортировка ставит Zebra перед apple, а цифры — раньше всех букв.
Любой код из таблицы уходит в файл, в сеть и внутрь штрих-кода восемью нулями и единицами — как устроена такая запись, разобрано в материале про двоичный код.
ASCII — подмножество Unicode
Когда собирали Unicode, первые 128 позиций оставили ровно там же, где они стояли в ASCII: латинская A — по-прежнему 65 (U+0041), пробел — 32. В UTF-8 эти номера кодируются одним байтом с прежним значением, поэтому любой чисто ASCII-файл байт в байт является корректным UTF-8, а латиница и цифры читаются в любой системе без настроек. Спотыкается всё, что лежит за пределами 128 позиций, — кириллица, диакритика, эмодзи; что с ними происходит при неверно угаданной кодировке, разобрано отдельно в материале про кодировку текста и кракозябры.
ASCII в штрих-кодах и QR-кодах
Линейный штрих-код не хранит буквы — он хранит номера символов, нарисованные полосами. Разница между стандартами упирается ровно в то, какой кусок таблицы каждый из них умеет закодировать.
Code 39: 43 символа и ни одной строчной буквы
Самый старый из живых буквенно-цифровых стандартов кодирует всего 43 позиции: десять цифр, двадцать шесть заглавных латинских букв, пробел и шесть знаков - . $ / + %. Плюс звёздочка, которая служит символом старта и стопа, а не данными. Строчных букв, скобок, подчёркивания и двоеточия там нет физически.
Обойти ограничение можно расширением Full ASCII Code 39: недостающие символы записывают парами из служебного знака и буквы — строчная a становится последовательностью +A, табуляция — $I. Полная таблица так укладывается в 43 базовых позиции, но каждый «лишний» символ занимает двойную ширину. Вторая сторона фокуса: сканер должен быть переведён в режим Full ASCII, иначе он честно отдаст в поле +A вместо a — частая причина исковерканных артикулов на складе.
Code 128: вся таблица целиком
Стандарт назван по числу кодируемых позиций — все 128 символов ASCII, включая управляющие. Достигается это тремя наборами знаков, между которыми можно переключаться прямо внутри одного кода:
- Набор A — коды 0–95: цифры, заглавные буквы, пунктуация. Единственный набор, где доступны LF, CR, ESC и прочий блок 0–31.
- Набор B — коды 32–127: цифры, заглавные и строчные буквы, вся пунктуация. Рабочая лошадка для артикулов вида
art-2026/a17. - Набор C — пары цифр от 00 до 99 одним символом. Чисто цифровая строка чётной длины занимает вдвое меньше места, поэтому длинные номера партий кодируют именно так.
Практическое правило: если в артикуле есть строчные буквы, EAN-13 и Code 39 отпадают, остаётся Code 128 в наборе B. Сравнение символик — в инструкции, как сделать штрих-код онлайн.
Невидимый GS в кодах маркировки
В кодах GS1 поля переменной длины разделяет символ GS с кодом 29 — тот самый управляющий байт, доступный только в наборе A. Ни на экране, ни в текстовом редакторе он не рисуется, поэтому считанный код выглядит склеенным в одну строку. Если разбор валится, а глазами всё правильно, почти всегда виноват потерянный разделитель: байт 29 не пережил переезд через буфер обмена.
Алфавитно-цифровой режим QR
В QR есть режим кодирования с намеренно урезанным алфавитом на 45 символов: цифры, заглавные латинские буквы, пробел и девять знаков $ % * + - . / :. Пара символов пакуется в 11 бит вместо 16, поэтому ссылка, записанная заглавными буквами, помещается в код меньшей версии и печатается крупнее при том же размере наклейки. Как только появляется хотя бы один строчный символ или кириллица, генератор переключается в байтовый режим, где каждый символ занимает полный байт. Эффект проще увидеть опытным путём — сгенерировать оба варианта в генераторе QR-кодов и сравнить размер матрицы.
ASCII в вебе и передаче данных
- Процентное кодирование в адресах. Пробел превращается в
%20, решётка — в%23, плюс — в%2B: число после процента и есть hex-код символа. - HTML-мнемоники. Запись
Aвыводит букву A: браузер понимает десятичный номер символа напрямую, аA— то же самое в шестнадцатеричном виде. - Base64. Алфавит из 64 знаков — латиница обоих регистров, цифры и два символа — целиком лежит в ASCII, поэтому строка проходит через любой канал, рассчитанный на текст.
- Заголовки почты и HTTP. Служебная часть протоколов исторически ограничена ASCII — отсюда конструкции вроде
=?UTF-8?B?...?=в теме письма. - CSV и TSV. Разделителем работает запятая (44), точка с запятой (59) или табуляция (9). Файл ломается, когда такой символ попадает внутрь значения без экранирования кавычкой (34).
Как посмотреть код символа в разных инструментах
Отдельная программа не нужна: пара функций найдётся в том, что уже стоит на машине.
- Excel и Google Таблицы. Формула
=КОДСИМВ("A")вернёт 65, обратная=СИМВОЛ(65)вернёт A; в английском интерфейсе этоCODEиCHAR. Заодно это способ вставить в ячейку перевод строки:=СИМВОЛ(10). - Python.
ord("A")даёт 65,chr(65)— обратно букву. Всю печатаемую часть выводит одна строка:print([(i, chr(i)) for i in range(32, 127)]). Байты строки покажет"ABC".encode(). - Консоль браузера. Открывается по F12.
"A".charCodeAt(0)вернёт 65, а[...str].map(c => c.charCodeAt(0))разложит на коды всю строку — удобно, когда ищешь в поле лишний невидимый байт. - PowerShell.
[byte][char]'A'покажет 65,[char]65вернёт символ. Всю печатаемую часть выводит32..126 | ForEach-Object { "$_ = $([char]$_)" }. - Терминал Linux и macOS. Команда
man asciiоткрывает полную таблицу с десятичной, восьмеричной и шестнадцатеричной колонками сразу, а код символа даётprintf 'A' | od -An -tuC. - Windows без установки программ. Утилита «Таблица символов» (charmap) показывает код выделенного знака в нижней строке окна, а ввод по номеру — удержать Alt и набрать код на цифровом блоке.
Как найти невидимый символ в данных
Когда строка выглядит правильной, а сравнение не проходит, задача обратная: увидеть символ, которого не видно.
- Hex-редактор (или
hexdump -Cв консоли) показывает байты и рядом их ASCII-представление, заменяя непечатаемые позиции точкой. Сразу видно, лежит в файле текст или что-то другое. - Команда
cat -A file.txtв Linux рисует конец строки как$, возврат каретки как^M, табуляцию как^I— быстрый ответ на вопрос, чем именно завершены строки. - Редакторы кода умеют подсвечивать управляющие символы: в VS Code за это отвечает опция отображения непечатаемых знаков, и невидимый байт становится заметным прямоугольником с номером.
Три грабли, связанные с ASCII
- Похожие символы разных алфавитов. Латинская
A— это 65, русскаяА— другой номер за пределами ASCII. Выглядят одинаково, а сравнение строк даёт «не равно». Та же беда с парамиcис,oио; на этом построена часть фишинговых доменов. - Автозамена кавычек и дефисов. Редакторы услужливо превращают прямую кавычку (34) в типографскую, а дефис (45) — в длинное тире. В ASCII этих знаков нет, и пароль, скопированный из документа, перестаёт подходить.
- Ограничение на ASCII там, где ждёшь любой текст. Часть систем принимает только латиницу и цифры: имена файлов для старого оборудования, логины, отдельные поля платёжных протоколов. Кириллица там либо режется, либо превращается в мусор.
Шпаргалка по кодам
- 0–31 и 127 — управляющие символы, 33 штуки, не печатаются.
- 32 — пробел, 0x20. Отсюда
%20в ссылках. - 48–57 — цифры 0–9. Число = код минус 48.
- 65–90 — заглавные A–Z, 97–122 — строчные a–z. Разница 32.
- 9 — Tab, 10 — перевод строки, 13 — возврат каретки, 27 — Escape, 29 — разделитель полей GS1.
- Всего 128 позиций: 95 печатаемых и 33 управляющих. Кириллицы среди них нет.
Частые вопросы
Сколько всего символов в таблице ASCII?
В стандартной таблице ASCII ровно 128 позиций с номерами от 0 до 127. Число не случайное: кодировка семибитная, а семь двоичных разрядов дают 2 в седьмой степени, то есть 128 комбинаций. Из них 95 отведено печатаемым символам с кодами от 32 до 126: пробел, пунктуация, десять цифр, по двадцать шесть заглавных и строчных латинских букв. Оставшиеся 33 позиции занимают управляющие символы — коды с 0 по 31 плюс код 127. Они ничего не рисуют, а отдают команды: перевести строку, вернуть каретку, сделать отступ табуляцией. Когда говорят про 256 символов ASCII, речь идёт уже не про сам стандарт, а про однобайтовые таблицы, достроившие верхнюю половину байта.
Какие символы ASCII умеют кодировать Code 39 и Code 128?
Code 39 берёт из таблицы только 43 позиции: цифры 0–9, заглавные латинские буквы A–Z, пробел и шесть знаков — дефис, точку, доллар, слеш, плюс и процент. Звёздочка отведена под старт и стоп. Строчных букв, двоеточия, скобок и подчёркивания там нет, поэтому артикул с маленькими буквами в обычный Code 39 не попадёт. Расширение Full ASCII Code 39 добавляет недостающие символы парами: строчная a записывается как +A. Код растёт вдвое по ширине, а сканер надо отдельно перевести в режим Full ASCII, иначе он вернёт в поле именно +A. Code 128 кодирует всю таблицу целиком — 128 позиций, включая управляющие символы, через три набора знаков с переключением внутри одного кода: A даёт коды 0–95, B — 32–127 со строчными буквами, C пакует пары цифр одним символом.
Что такое управляющие символы и нужны ли они сейчас?
Управляющие символы — коды 0–31 и 127, которые не изображают знак, а отдают команду устройству или программе. Их придумывали для телеграфных аппаратов, поэтому названия звучат архаично: конец передачи, подтверждение приёма, синхронизация. Часть вышла из употребления, но десяток кодов в ходу ежедневно. Код 10 (LF) — перевод строки, он завершает каждую строку текстового файла в Linux и macOS. Код 13 (CR) — возврат каретки, в Windows идёт в паре с LF, отчего появляются проблемы при переносе файлов. Код 9 (HT) — табуляция. Код 27 (ESC) открывает управляющие последовательности: команды ESC/POS для чековых принтеров, ANSI-коды в терминале. Код 29 (GS) отделяет поля переменной длины в кодах маркировки GS1, и его потеря ломает разбор.
Почему заглавная и строчная буква отличаются ровно на 32?
Это осознанное решение авторов стандарта, а не совпадение. Заглавные латинские буквы занимают коды 65–90, строчные — 97–122, смещение ровно 32. Число 32 в двоичном виде — 100000, то есть один-единственный разряд, и заглавная буква отличается от строчной ровно одним поднятым битом. Для техники шестидесятых это давало огромный выигрыш: смена регистра выполнялась одной побитовой операцией вместо поиска по таблице соответствий. Приём жив до сих пор — приведение к нижнему регистру через ИЛИ с числом 0x20, к верхнему через И с 0xDF. Менее приятное следствие: при сортировке по коду все заглавные оказываются раньше всех строчных, поэтому слово Zebra встаёт перед словом apple.
Есть ли русские буквы в таблице ASCII?
В таблице ASCII русских букв нет и никогда не было. Стандарт разрабатывали в США для английского языка, и все 128 позиций расписаны под латиницу, цифры, пунктуацию и служебные команды. Кириллица живёт за пределами таблицы: собственные номера ей дал Unicode, и в UTF-8 русская буква занимает два байта вместо одного. Практических следствий два. Первое: смена регистра через смещение 32 и прочие арифметические трюки по кодам на кириллице не работают. Второе: любое поле, ограниченное чистым ASCII, русский текст либо режет, либо превращает в мусор — так ведут себя имена файлов для старого оборудования и линейные штрих-коды Code 39 и Code 128.
Как перевести символ в код и обратно без специальных программ?
Все способы встроены в то, что уже стоит на компьютере. В Excel и Google Таблицах работает пара формул: КОДСИМВ вернёт номер символа, СИМВОЛ построит символ по номеру; в английском интерфейсе это CODE и CHAR. В консоли браузера, которая открывается по F12, достаточно набрать "A".charCodeAt(0), чтобы увидеть 65, а String.fromCharCode(65) вернёт символ обратно. В Python это функции ord и chr, в PowerShell — конструкции [byte][char]'A' и [char]65. В Linux и macOS команда man ascii открывает полную таблицу прямо в терминале. В Windows есть утилита «Таблица символов», она же charmap: выбираете знак и видите его код.