Таблица ASCII, Windows-1251 и UTF-8 для русских букв
Полная таблица ASCII: управляющие символы 0–31 и 127 с назначением, печатные символы 32–126 в десятичной, шестнадцатеричной, восьмеричной и двоичной записи. Коды русских букв в кодировках Windows-1251, UTF-8 и Unicode, причины «кракозябр» и признаки разных кодировок.
ASCII (American Standard Code for Information Interchange) — семибитная кодировка из 128 символов, принятая в 1963 году. Первые 32 кода и код 127 — управляющие символы, остальные 95 — печатные: пробел, цифры, латинские буквы и знаки препинания. Все современные кодировки (Windows-1251, KOI8-R, UTF-8) совпадают с ASCII в диапазоне 0–127, а отличаются только старшей половиной.
Печатные символы (32–126)
| Dec | Hex | Oct | Bin | Символ |
|---|---|---|---|---|
| 32 | 20 | 040 | 0100000 | пробел |
| 33 | 21 | 041 | 0100001 | ! |
| 34 | 22 | 042 | 0100010 | " |
| 35 | 23 | 043 | 0100011 | # |
| 36 | 24 | 044 | 0100100 | $ |
| 37 | 25 | 045 | 0100101 | % |
| 38 | 26 | 046 | 0100110 | & |
| 39 | 27 | 047 | 0100111 | ' |
| 40 | 28 | 050 | 0101000 | ( |
| 41 | 29 | 051 | 0101001 | ) |
| 42 | 2A | 052 | 0101010 | * |
| 43 | 2B | 053 | 0101011 | + |
| 44 | 2C | 054 | 0101100 | , |
| 45 | 2D | 055 | 0101101 | - |
| 46 | 2E | 056 | 0101110 | . |
| 47 | 2F | 057 | 0101111 | / |
| 48 | 30 | 060 | 0110000 | 0 |
| 49 | 31 | 061 | 0110001 | 1 |
| 50 | 32 | 062 | 0110010 | 2 |
| 51 | 33 | 063 | 0110011 | 3 |
| 52 | 34 | 064 | 0110100 | 4 |
| 53 | 35 | 065 | 0110101 | 5 |
| 54 | 36 | 066 | 0110110 | 6 |
| 55 | 37 | 067 | 0110111 | 7 |
| 56 | 38 | 070 | 0111000 | 8 |
| 57 | 39 | 071 | 0111001 | 9 |
| 58 | 3A | 072 | 0111010 | : |
| 59 | 3B | 073 | 0111011 | ; |
| 60 | 3C | 074 | 0111100 | < |
| 61 | 3D | 075 | 0111101 | = |
| 62 | 3E | 076 | 0111110 | > |
| 63 | 3F | 077 | 0111111 | ? |
| 64 | 40 | 100 | 1000000 | @ |
| 65 | 41 | 101 | 1000001 | A |
| 66 | 42 | 102 | 1000010 | B |
| 67 | 43 | 103 | 1000011 | C |
| 68 | 44 | 104 | 1000100 | D |
| 69 | 45 | 105 | 1000101 | E |
| 70 | 46 | 106 | 1000110 | F |
| 71 | 47 | 107 | 1000111 | G |
| 72 | 48 | 110 | 1001000 | H |
| 73 | 49 | 111 | 1001001 | I |
| 74 | 4A | 112 | 1001010 | J |
| 75 | 4B | 113 | 1001011 | K |
| 76 | 4C | 114 | 1001100 | L |
| 77 | 4D | 115 | 1001101 | M |
| 78 | 4E | 116 | 1001110 | N |
| 79 | 4F | 117 | 1001111 | O |
| 80 | 50 | 120 | 1010000 | P |
| 81 | 51 | 121 | 1010001 | Q |
| 82 | 52 | 122 | 1010010 | R |
| 83 | 53 | 123 | 1010011 | S |
| 84 | 54 | 124 | 1010100 | T |
| 85 | 55 | 125 | 1010101 | U |
| 86 | 56 | 126 | 1010110 | V |
| 87 | 57 | 127 | 1010111 | W |
| 88 | 58 | 130 | 1011000 | X |
| 89 | 59 | 131 | 1011001 | Y |
| 90 | 5A | 132 | 1011010 | Z |
| 91 | 5B | 133 | 1011011 | [ |
| 92 | 5C | 134 | 1011100 | \ |
| 93 | 5D | 135 | 1011101 | ] |
| 94 | 5E | 136 | 1011110 | ^ |
| 95 | 5F | 137 | 1011111 | _ |
| 96 | 60 | 140 | 1100000 | ` |
| 97 | 61 | 141 | 1100001 | a |
| 98 | 62 | 142 | 1100010 | b |
| 99 | 63 | 143 | 1100011 | c |
| 100 | 64 | 144 | 1100100 | d |
| 101 | 65 | 145 | 1100101 | e |
| 102 | 66 | 146 | 1100110 | f |
| 103 | 67 | 147 | 1100111 | g |
| 104 | 68 | 150 | 1101000 | h |
| 105 | 69 | 151 | 1101001 | i |
| 106 | 6A | 152 | 1101010 | j |
| 107 | 6B | 153 | 1101011 | k |
| 108 | 6C | 154 | 1101100 | l |
| 109 | 6D | 155 | 1101101 | m |
| 110 | 6E | 156 | 1101110 | n |
| 111 | 6F | 157 | 1101111 | o |
| 112 | 70 | 160 | 1110000 | p |
| 113 | 71 | 161 | 1110001 | q |
| 114 | 72 | 162 | 1110010 | r |
| 115 | 73 | 163 | 1110011 | s |
| 116 | 74 | 164 | 1110100 | t |
| 117 | 75 | 165 | 1110101 | u |
| 118 | 76 | 166 | 1110110 | v |
| 119 | 77 | 167 | 1110111 | w |
| 120 | 78 | 170 | 1111000 | x |
| 121 | 79 | 171 | 1111001 | y |
| 122 | 7A | 172 | 1111010 | z |
| 123 | 7B | 173 | 1111011 | { |
| 124 | 7C | 174 | 1111100 | | |
| 125 | 7D | 175 | 1111101 | } |
| 126 | 7E | 176 | 1111110 | ~ |
Полезные закономерности: цифра d имеет код 48 + d (0x30 + d); заглавная и строчная латинская буква отличаются ровно на 32 (один бит 0x20), поэтому «A» = 0x41, «a» = 0x61; буква с номером k в алфавите имеет код 64 + k (заглавная).
Управляющие символы
| Dec | Hex | Oct | Bin | Код | Назначение |
|---|---|---|---|---|---|
| 0 | 00 | 000 | 0000000 | NUL | пустой символ |
| 1 | 01 | 001 | 0000001 | SOH | |
| 2 | 02 | 002 | 0000010 | STX | |
| 3 | 03 | 003 | 0000011 | ETX | |
| 4 | 04 | 004 | 0000100 | EOT | |
| 5 | 05 | 005 | 0000101 | ENQ | |
| 6 | 06 | 006 | 0000110 | ACK | |
| 7 | 07 | 007 | 0000111 | BEL | звуковой сигнал |
| 8 | 08 | 010 | 0001000 | BS | возврат на шаг |
| 9 | 09 | 011 | 0001001 | HT | горизонтальная табуляция |
| 10 | 0A | 012 | 0001010 | LF | перевод строки |
| 11 | 0B | 013 | 0001011 | VT | вертикальная табуляция |
| 12 | 0C | 014 | 0001100 | FF | прогон страницы |
| 13 | 0D | 015 | 0001101 | CR | возврат каретки |
| 14 | 0E | 016 | 0001110 | SO | |
| 15 | 0F | 017 | 0001111 | SI | |
| 16 | 10 | 020 | 0010000 | DLE | |
| 17 | 11 | 021 | 0010001 | DC1 | |
| 18 | 12 | 022 | 0010010 | DC2 | |
| 19 | 13 | 023 | 0010011 | DC3 | |
| 20 | 14 | 024 | 0010100 | DC4 | |
| 21 | 15 | 025 | 0010101 | NAK | |
| 22 | 16 | 026 | 0010110 | SYN | |
| 23 | 17 | 027 | 0010111 | ETB | |
| 24 | 18 | 030 | 0011000 | CAN | |
| 25 | 19 | 031 | 0011001 | EM | |
| 26 | 1A | 032 | 0011010 | SUB | |
| 27 | 1B | 033 | 0011011 | ESC | escape (начало управляющей последовательности) |
| 28 | 1C | 034 | 0011100 | FS | |
| 29 | 1D | 035 | 0011101 | GS | |
| 30 | 1E | 036 | 0011110 | RS | |
| 31 | 1F | 037 | 0011111 | US | |
| 127 | 7F | 177 | 1111111 | DEL | удаление |
Сегодня на практике используются в основном TAB (9), LF (10), CR (13), ESC (27) и NUL (0). Перевод строки в текстовых файлах отличается между системами: в Linux и macOS — LF (\n), в Windows — пара CR LF (\r\n). Если файл из Windows открыть в Linux-редакторе, в конце строк могут появиться символы ^M — это CR.
Русские буквы: Windows-1251, UTF-8 и Unicode
| Буква | Windows-1251 | UTF-8 | Unicode | Строчная | Windows-1251 | UTF-8 | Unicode |
|---|---|---|---|---|---|---|---|
| А | C0 | D0 90 | U+0410 | а | E0 | D0 B0 | U+0430 |
| Б | C1 | D0 91 | U+0411 | б | E1 | D0 B1 | U+0431 |
| В | C2 | D0 92 | U+0412 | в | E2 | D0 B2 | U+0432 |
| Г | C3 | D0 93 | U+0413 | г | E3 | D0 B3 | U+0433 |
| Д | C4 | D0 94 | U+0414 | д | E4 | D0 B4 | U+0434 |
| Е | C5 | D0 95 | U+0415 | е | E5 | D0 B5 | U+0435 |
| Ё | A8 | D0 81 | U+0401 | ё | B8 | D1 91 | U+0451 |
| Ж | C6 | D0 96 | U+0416 | ж | E6 | D0 B6 | U+0436 |
| З | C7 | D0 97 | U+0417 | з | E7 | D0 B7 | U+0437 |
| И | C8 | D0 98 | U+0418 | и | E8 | D0 B8 | U+0438 |
| Й | C9 | D0 99 | U+0419 | й | E9 | D0 B9 | U+0439 |
| К | CA | D0 9A | U+041A | к | EA | D0 BA | U+043A |
| Л | CB | D0 9B | U+041B | л | EB | D0 BB | U+043B |
| М | CC | D0 9C | U+041C | м | EC | D0 BC | U+043C |
| Н | CD | D0 9D | U+041D | н | ED | D0 BD | U+043D |
| О | CE | D0 9E | U+041E | о | EE | D0 BE | U+043E |
| П | CF | D0 9F | U+041F | п | EF | D0 BF | U+043F |
| Р | D0 | D0 A0 | U+0420 | р | F0 | D1 80 | U+0440 |
| С | D1 | D0 A1 | U+0421 | с | F1 | D1 81 | U+0441 |
| Т | D2 | D0 A2 | U+0422 | т | F2 | D1 82 | U+0442 |
| У | D3 | D0 A3 | U+0423 | у | F3 | D1 83 | U+0443 |
| Ф | D4 | D0 A4 | U+0424 | ф | F4 | D1 84 | U+0444 |
| Х | D5 | D0 A5 | U+0425 | х | F5 | D1 85 | U+0445 |
| Ц | D6 | D0 A6 | U+0426 | ц | F6 | D1 86 | U+0446 |
| Ч | D7 | D0 A7 | U+0427 | ч | F7 | D1 87 | U+0447 |
| Ш | D8 | D0 A8 | U+0428 | ш | F8 | D1 88 | U+0448 |
| Щ | D9 | D0 A9 | U+0429 | щ | F9 | D1 89 | U+0449 |
| Ъ | DA | D0 AA | U+042A | ъ | FA | D1 8A | U+044A |
| Ы | DB | D0 AB | U+042B | ы | FB | D1 8B | U+044B |
| Ь | DC | D0 AC | U+042C | ь | FC | D1 8C | U+044C |
| Э | DD | D0 AD | U+042D | э | FD | D1 8D | U+044D |
| Ю | DE | D0 AE | U+042E | ю | FE | D1 8E | U+044E |
| Я | DF | D0 AF | U+042F | я | FF | D1 8F | U+044F |
В Windows-1251 каждая буква занимает один байт: заглавные А–Я — коды C0–DF, строчные а–я — E0–FF, буквы Ё и ё стоят отдельно (A8 и B8). В UTF-8 кириллица кодируется двумя байтами: первый — D0 или D1, второй — от 80 до BF. В Unicode русский алфавит занимает диапазон U+0410–U+044F, Ё — U+0401, ё — U+0451.
Откуда берутся «кракозябры»
| Что видно вместо «Привет» | Причина |
|---|---|
| Привет | текст в UTF-8 прочитан как Windows-1251: каждая буква превращается в пару «Р…» или «С…» |
| Ïðèâåò | текст в Windows-1251 прочитан как Latin-1 (Windows-1252) |
| ������ | текст в Windows-1251 прочитан как UTF-8: байты C0–FF без продолжения недопустимы и заменяются символом U+FFFD |
| рТЙЧЕФ | текст в KOI8-R прочитан как Windows-1251 (или наоборот) |
Чтобы исправить текст, нужно не «перекодировать» его ещё раз, а открыть файл, явно указав правильную исходную кодировку. В HTML-страницах кодировку объявляют тегом <meta charset="utf-8">.
Как устроен UTF-8
| Диапазон кодов Unicode | Байтов | Шаблон битов | Примеры |
|---|---|---|---|
| U+0000 – U+007F | 1 | 0xxxxxxx | ASCII |
| U+0080 – U+07FF | 2 | 110xxxxx 10xxxxxx | кириллица, греческий, иврит, арабский |
| U+0800 – U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx | китайские иероглифы, знак ₽ (U+20BD), € |
| U+10000 – U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | эмодзи, редкие иероглифы |
Пример: буква «Ж» имеет код U+0416 = 100 0001 0110₂. Раскладываем 11 бит по шаблону 110xxxxx 10xxxxxx: 11010000 10010110 = D0 96. Посмотреть байты любой строки в разных кодировках можно в калькуляторе Base64 и хеш-калькуляторе: хеш считается от байтов, поэтому для одной и той же строки в UTF-8 и Windows-1251 он разный.
Комментарии и вопросы