Перейти к содержимому
Таблица ASCII: коды символов простыми словами
blogQRcode.website9215 мин чтения

Таблица ASCII: коды символов простыми словами

#ASCII#коды символов#кодировка#управляющие символы#Unicode#Code 128#hex#таблица символов

Таблица 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 позиции, и внутри каждого порядок логичен.

БлокDecHexСодержимое
00–3100–1FУправляющие символы, не печатаются
132–6320–3FПробел, пунктуация, цифры 0–9, символы :;<=>?
264–9540–5F@, заглавные A–Z, скобки [\]^_
396–12760–7FОбратный апостроф, строчные a–z, {|}~, DEL

Отсюда видно две вещи. Заглавные буквы начинаются с 65, строчные — с 97, разница ровно 32. Цифры лежат подряд с 48, поэтому символ цифры превращается в число вычитанием.

Управляющие символы: коды 0–31 и 127

Первые 32 позиции придумывали для телеграфных аппаратов, и половина названий звучит как археология. Но десяток кодов из блока вы используете ежедневно — нажимая Enter или Tab.

DecHexОбозначениеЧто делает
000NULНулевой символ. В языке C — признак конца строки
101SOHНачало заголовка сообщения
202STXНачало текста
303ETXКонец текста. В терминале это Ctrl+C
404EOTКонец передачи. Ctrl+D в консоли
505ENQЗапрос «ты на связи?»
606ACKПодтверждение приёма
707BELЗвуковой сигнал, терминал пищит до сих пор
808BSBackspace, шаг назад
909HTГоризонтальная табуляция — клавиша Tab
100ALFПеревод строки. В Linux и macOS — конец строки
110BVTВертикальная табуляция
120CFFПеревод страницы, команда принтеру «новый лист»
130DCRВозврат каретки в начало строки
140ESOПереключение на другой набор знаков
150FSIВозврат к основному набору
1610DLEЭкранирование в канале передачи данных
1711DC1Он же XON — возобновить передачу
1812DC2Управление устройством 2
1913DC3Он же XOFF — приостановить передачу
2014DC4Управление устройством 4
2115NAKПриём с ошибкой, отрицательное подтверждение
2216SYNСинхронизация при простое линии
2317ETBКонец блока передачи
2418CANОтмена предыдущих данных
2519EMКонец носителя, кончилась лента
261ASUBЗамена испорченного символа. В DOS — конец файла
271BESCEscape, начало управляющей последовательности
281CFSРазделитель файлов
291DGSРазделитель групп
301ERSРазделитель записей
311FUSРазделитель полей
1277FDELУдаление символа

Почему 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

DecHexСимволНазвание
3220(пробел)Space
3321!Восклицательный знак
3422"Двойная кавычка
3523#Решётка, хеш
3624$Доллар
3725%Процент
3826&Амперсанд
3927'Апостроф
4028(Открывающая скобка
4129)Закрывающая скобка
422A*Звёздочка
432B+Плюс
442C,Запятая
452D-Дефис, минус
462E.Точка
472F/Прямой слеш

Обратите внимание на код пробела в шестнадцатеричном виде — 20. Отсюда растёт %20 в веб-адресах.

Цифры 48–57 и символы 58–64

DecHexСимволDecHexСимвол
4830057399
49311583A:
50322593B;
51333603C<
52344613D=
53355623E>
54366633F?
553776440@
56388   

Шестнадцатеричные коды цифр устроены изящно: 0 — это 0x30, 9 — 0x39. Младший разряд hex-кода совпадает с самой цифрой, поэтому в дампе памяти строку из цифр видно с первого взгляда: подряд идут байты 30-х. Как читаются такие записи и откуда в них буквы A–F — в разборе шестнадцатеричной системы.

Латиница: 65–90 и 97–122

ЗаглавнаяDecHexСтрочнаяDecHex
A6541a9761
B6642b9862
C6743c9963
D6844d10064
E6945e10165
F7046f10266
G7147g10367
H7248h10468
I7349i10569
J744Aj1066A
K754Bk1076B
L764Cl1086C
M774Dm1096D
N784En1106E
O794Fo1116F
P8050p11270
Q8151q11371
R8252r11472
S8353s11573
T8454t11674
U8555u11775
V8656v11876
W8757w11977
X8858x12078
Y8959y12179
Z905Az1227A

Остальные позиции — служебные знаки вокруг алфавитов: 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-мнемоники. Запись &#65; выводит букву A: браузер понимает десятичный номер символа напрямую, а &#x41; — то же самое в шестнадцатеричном виде.
  • 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

  1. Похожие символы разных алфавитов. Латинская A — это 65, русская А — другой номер за пределами ASCII. Выглядят одинаково, а сравнение строк даёт «не равно». Та же беда с парами c и с, o и о; на этом построена часть фишинговых доменов.
  2. Автозамена кавычек и дефисов. Редакторы услужливо превращают прямую кавычку (34) в типографскую, а дефис (45) — в длинное тире. В ASCII этих знаков нет, и пароль, скопированный из документа, перестаёт подходить.
  3. Ограничение на 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: выбираете знак и видите его код.