Перейти к содержанию

Таблица ASCII и кириллические кодировки

Коды всех символов ASCII в десятичном и шестнадцатеричном виде, назначение управляющих символов и верхние половины кириллических кодовых страниц Windows-1251, KOI8-R и CP866. Ниже — перевод любого текста в байты каждой кодировки и UTF-8.

Обновлено Редакция GAW

ASCII — основа всех кодировок: первые 128 кодов одинаковы в Windows-1251, KOI8-R, CP866 и UTF-8. Различаются только верхние 128 кодов однобайтовых кодировок, где и живёт кириллица, и способ кодирования остальных символов в UTF-8.

Коротко

  • ASCII — 128 кодов: 33 управляющих (0–31 и 127) и 95 печатных (32–126).
  • Цифры '0'–'9' — коды 0x30–0x39: значение цифры получают вычитанием 0x30.
  • Регистр латинской буквы задаёт бит 5: A — 0x41, a — 0x61.
  • Кириллица: «А» — 0xC0 в CP1251, 0xE1 в KOI8-R, 0x80 в CP866, D0 90 в UTF-8.
  • UTF-8: русская буква занимает два байта, символ ASCII — один.

Управляющие символы ASCII

Коды 0–31 и 127 не отображаются, а управляют устройством: переводят строку, подают звонок, останавливают передачу. В терминале их вводят с клавишей Ctrl — отсюда запись ^C для Ctrl+C. Многие значения устарели вместе с телетайпами, но часть работает каждый день: CR и LF в конце строки, TAB, ESC в начале управляющих последовательностей терминала, XON и XOFF при программном управлении потоком UART.

Управляющие символы ASCII: коды 0–31 и 127
DecHexСимволCtrlВ CНазначение
000NUL^@\0пустой символ, конец строки в C
101SOH^A—начало заголовка
202STX^B—начало текста
303ETX^C—конец текста; Ctrl+C в терминале
404EOT^D—конец передачи; Ctrl+D — конец ввода в Unix
505ENQ^E—запрос
606ACK^F—подтверждение
707BEL^G\aзвонок
808BS^H\bвозврат на одну позицию
909HT^I\tгоризонтальная табуляция
100ALF^J\nперевод строки
110BVT^K\vвертикальная табуляция
120CFF^L\fперевод страницы
130DCR^M\rвозврат каретки
140ESO^N—переход на дополнительный набор символов
150FSI^O—возврат к основному набору
1610DLE^P—смена значения следующих символов
1711DC1^Q—управление устройством 1; XON — продолжить передачу
1812DC2^R—управление устройством 2
1913DC3^S—управление устройством 3; XOFF — приостановить передачу
2014DC4^T—управление устройством 4
2115NAK^U—отрицательное подтверждение
2216SYN^V—синхронизация
2317ETB^W—конец блока передачи
2418CAN^X—отмена
2519EM^Y—конец носителя
261ASUB^Z—замена; Ctrl+Z — конец файла в DOS
271BESC^[\x1Bначало управляющей последовательности
281CFS^\—разделитель файлов
291DGS^]—разделитель групп
301ERS^^—разделитель записей
311FUS^_—разделитель полей
1277FDEL^?—удаление

ESC в языке C стандартной escape-последовательности не имеет: пишут \x1B или \033, а \e — расширение GCC.

Печатные символы ASCII (32–126)

Печатные символы ASCII 32–126: строка — старшая шестнадцатеричная цифра кода, столбец — младшая; под символом — десятичный код
Старшая цифра0123456789ABCDEF
2xSP32!33"34#35$36%37&38'39(40)41*42+43,44-45.46/47
3x048149250351452553654755856957:58;59<60=61>62?63
4x@64A65B66C67D68E69F70G71H72I73J74K75L76M77N78O79
5xP80Q81R82S83T84U85V86W87X88Y89Z90[91\92]93^94_95
6x`96a97b98c99d100e101f102g103h104i105j106k107l108m109n110o111
7xp112q113r114s115t116u117v118w119x120y121z122{123|124}125~126DEL127

Код символа складывается из номера строки и столбца: строка — старшая шестнадцатеричная цифра, столбец — младшая. Например, «A» стоит в строке 4x и столбце 1, его код — 0x41, или 65; под каждым символом подписан десятичный код.

Расположение символов не случайно, и это используют в программах для микроконтроллеров:

  • Цифры идут подряд с 0x30: значение цифры — это c - '0', а символ цифры — '0' + n.
  • Строчные и заглавные латинские буквы отличаются одним битом 5 (0x20): c | 0x20 переводит заглавную букву в строчную, c & ~0x20 — строчную в заглавную. Для других символов эти операции не годятся, поэтому сначала проверяют, что это буква.
  • Шестнадцатеричные цифры A–F идут не сразу после 9: между '9' (0x39) и 'A' (0x41) стоят семь знаков, поэтому при выводе числа в HEX к значениям 10–15 прибавляют 'A' − 10.

Кириллица: CP1251, KOI8-R и CP866

В однобайтовых кодировках кириллица занимает коды 128–255. Кодировок несколько, и текст в одной из них, открытый в другой, превращается в «кракозябры».

Windows-1251

Основная кириллическая кодировка Windows. Буквы идут подряд по алфавиту: А–Я — 0xC0–0xDF, а–я — 0xE0–0xFF, поэтому номер буквы в алфавите получается вычитанием, но Ё и ё стоят отдельно — 0xA8 и 0xB8. Код 0x98 в таблице Microsoft не определён.

CP1251: символы с кодами 128–255; строка — старшая шестнадцатеричная цифра, столбец — младшая, под символом — десятичный код
Старшая цифра0123456789ABCDEF
8xЂ128Ѓ129‚130ѓ131„132…133†134‡135€136‰137Љ138‹139Њ140Ќ141Ћ142Џ143
9xђ144‘145’146“147”148•149–150—151—152™153љ154›155њ156ќ157ћ158џ159
AxNBSP160Ў161ў162Ј163¤164Ґ165¦166§167Ё168©169Є170«171¬172SHY173®174Ї175
Bx°176±177І178і179ґ180µ181182·183ё184№185є186»187ј188Ѕ189ѕ190ї191
CxА192Б193В194Г195Д196Е197Ж198З199И200Й201К202Л203М204Н205О206П207
DxР208С209Т210У211Ф212Х213Ц214Ч215Ш216Щ217Ъ218Ы219Ь220Э221Ю222Я223
Exа224б225в226г227д228е229ж230з231и232й233к234л235м236н237о238п239
Fxр240с241т242у243ф244х245ц246ч247ш248щ249ъ250ы251ь252э253ю254я255

KOI8-R

Кодировка Unix и электронной почты, происходит от КОИ-8 (ГОСТ 19768-74). Строчные буквы — 0xC0–0xDF, заглавные — 0xE0–0xFF, но порядок не алфавитный: если отбросить восьмой бит, строчная русская буква превращается в созвучную заглавную латинскую. Так текст оставался читаемым транслитом при передаче через семибитные каналы. В 0x80–0xBF — псевдографика и Ё/ё.

KOI8-R: символы с кодами 128–255; строка — старшая шестнадцатеричная цифра, столбец — младшая, под символом — десятичный код
Старшая цифра0123456789ABCDEF
8x─128│129┌130┐131└132┘133├134┤135┬136┴137┼138▀139▄140█141▌142▐143
9x░144▒145▓146⌠147■148∙149√150≈151≤152≥153NBSP154⌡155°156²157·158÷159
Ax═160║161╒162ё163╓164╔165╕166╖167╗168╘169╙170╚171╛172╜173╝174╞175
Bx╟176╠177╡178Ё179╢180╣181╤182╥183╦184╧185╨186╩187╪188╫189╬190©191
Cxю192а193б194ц195д196е197ф198г199х200и201й202к203л204м205н206о207
Dxп208я209р210с211т212у213ж214в215ь216ы217з218ш219э220щ221ч222ъ223
ExЮ224А225Б226Ц227Д228Е229Ф230Г231Х232И233Й234К235Л236М237Н238О239
FxП240Я241Р242С243Т244У245Ж246В247Ь248Ы249З250Ш251Э252Щ253Ч254Ъ255

CP866

Кодировка DOS, до сих пор используется в консоли Windows и в некоторых BIOS. А–Я — 0x80–0x9F, а–п — 0xA0–0xAF, р–я — 0xE0–0xEF, Ё и ё — 0xF0 и 0xF1. Между строчными «п» и «р» — псевдографика 0xB0–0xDF: рамки и блоки на тех же местах, что в кодовой странице IBM PC, поэтому таблицы из DOS-программ рисовались без изменений.

CP866: символы с кодами 128–255; строка — старшая шестнадцатеричная цифра, столбец — младшая, под символом — десятичный код
Старшая цифра0123456789ABCDEF
8xА128Б129В130Г131Д132Е133Ж134З135И136Й137К138Л139М140Н141О142П143
9xР144С145Т146У147Ф148Х149Ц150Ч151Ш152Щ153Ъ154Ы155Ь156Э157Ю158Я159
Axа160б161в162г163д164е165ж166з167и168й169к170л171м172н173о174п175
Bx░176▒177▓178│179┤180╡181╢182╖183╕184╣185║186╗187╝188╜189╛190┐191
Cx└192┴193┬194├195─196┼197╞198╟199╚200╔201╩202╦203╠204═205╬206╧207
Dx╨208╤209╥210╙211╘212╒213╓214╫215╪216┘217┌218█219▄220▌221▐222▀223
Exр224с225т226у227ф228х229ц230ч231ш232щ233ъ234ы235ь236э237ю238я239
FxЁ240ё241Є242є243Ї244ї245Ў246ў247°248∙249·250√251№252¤253■254NBSP255

UTF-8

UTF-8 кодирует любой символ Unicode от одного до четырёх байтов. Символы ASCII записываются одним байтом с тем же кодом, поэтому английский текст в ASCII уже является корректным UTF-8. Остальные символы занимают несколько байтов, у каждого из которых установлен старший бит: в ASCII таких байтов не бывает, и их нельзя спутать с обычными символами.

Весь кириллический блок U+0400–U+04FF кодируется двумя байтами, а русские буквы — парами D0 xx и D1 xx: «А» (U+0410) — D0 90, «я» (U+044F) — D1 8F, «Ё» (U+0401) — D0 81, «ё» (U+0451) — D1 91. Строка «Привет» занимает в UTF-8 12 байт против 6 в Windows-1251: при выделении буферов и расчёте длины пакета для UART это нужно учитывать.

Код символа и текста

Впишите текст — для каждого символа появятся его кодовая точка Unicode, байты UTF-8 и коды в трёх кириллических кодировках, а ниже — вся строка в виде байтов.

показываются первые 40 символов

СимволUnicodeUTF-8CP1251KOI8-RCP866
ПU+041FD0 9FCFF08F
рU+0440D1 80F0D2E0
иU+0438D0 B8E8C9A8
вU+0432D0 B2E2D7A2
еU+0435D0 B5E5C5A5
тU+0442D1 82F2D4E2
,U+002C2C2C2C2C
SPU+002020202020
GU+004747474747
AU+004141414141
WU+005757575757
!U+002121212121
UTF-8
D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 2C 20 47 41 57 21
CP1251
CF F0 E8 E2 E5 F2 2C 20 47 41 57 21
KOI8-R
F0 D2 C9 D7 C5 D4 2C 20 47 41 57 21
CP866
8F E0 A8 A2 A5 E2 2C 20 47 41 57 21

Кодировки в электронике

  • Дисплеи. Знакогенератор символьных ЖКИ на HD44780 содержит свою таблицу символов, а не Windows-1251 или UTF-8: русский текст для такого дисплея перекодируют по таблице его ПЗУ. Подробности — в статье об HD44780.
  • UART и терминалы. Программа-терминал показывает принятые байты в выбранной кодировке. Если вместо русского текста видны «кракозябры», кодировки отправителя и терминала не совпадают. Как устроен сам обмен — в статье об UART.
  • Контроль целостности. Строку, переданную по линии, проверяют контрольной суммой, которая считается по байтам, а не по символам: одно и то же слово в UTF-8 и Windows-1251 даст разную CRC. Посчитать её можно в калькуляторе CRC, выбрав ввод текстом.

Частые вопросы

Что такое таблица ASCII?

ASCII — семибитная кодировка символов, американский стандарт, международный вариант которого — ISO/IEC 646 и ECMA-6. В ней 128 кодов: 33 управляющих символа (0–31 и 127) и 95 печатных (32–126) — латинские буквы, цифры, знаки препинания и пробел. Все современные кодировки, включая UTF-8 и кириллические кодовые страницы, совпадают с ASCII в первой половине.

Как узнать код русской буквы?

Код зависит от кодировки. Буква «А» — это 0xC0 (192) в Windows-1251, 0xE1 (225) в KOI8-R, 0x80 (128) в CP866 и два байта D0 90 в UTF-8. Впишите текст в поле «Текст или символ» на этой странице — для каждого символа появятся коды во всех четырёх кодировках и строка байтов целиком.

Почему в KOI8-R русские буквы идут не по алфавиту?

KOI8 устроена так, что если отбросить восьмой бит, строчная русская буква превращается в похожую по звучанию заглавную латинскую: «а» (0xC1) — в A (0x41), «б» — в B, «в» — в W. Текст, прошедший через семибитный канал, оставался читаемым транслитом. Поэтому порядок букв в KOI8-R повторяет латинский алфавит: ю, а, б, ц, д, е, ф, г, х…

Чем отличаются CR и LF?

CR (13, 0x0D) — возврат каретки в начало строки, LF (10, 0x0A) — перевод на следующую строку. В Windows конец строки — пара CR LF, в Unix и Linux — LF. В протоколах вроде HTTP и SMTP строки заканчиваются CR LF. Терминалы для UART позволяют выбрать, что отправлять по Enter и как понимать принятые CR и LF, — если строки «лесенкой» или накладываются друг на друга, дело в этой настройке.

Сколько байт занимает русская буква в UTF-8?

Два: русские буквы кодируются парами байтов D0 xx и D1 xx, как и весь кириллический блок Unicode — двумя байтами. Символы ASCII занимают один байт, знак евро — три. Поэтому строка «Привет» в UTF-8 — 12 байт, а в Windows-1251 — 6: это важно для буферов, длины пакетов и вывода на дисплеи.

Источники

  1. V. Cerf. RFC 20: ASCII format for Network Interchange. 1969 — семибитный код ASCII и назначение управляющих символов
  2. Ecma International. ECMA-6: 7-bit coded character set, 6th edition, 1991 — международный вариант ASCII, он же ISO/IEC 646
  3. WHATWG. Encoding Standard — таблицы windows-1251, KOI8-R и IBM866, по которым построены таблицы на странице
  4. Unicode Consortium. Microsoft cp1251 to Unicode table (CP1251.TXT) — код 0x98 в Windows-1251 не определён
  5. A. Chernov. RFC 1489: Registration of a Cyrillic Character Set. 1993 — KOI8-R и его происхождение от КОИ-8 по ГОСТ 19768-74
  6. Unicode Consortium. Microsoft cp866 to Unicode table (CP866.TXT) — кодовая страница DOS с псевдографикой
  7. F. Yergeau. RFC 3629: UTF-8, a transformation format of ISO 10646. 2003 — правила кодирования UTF-8