bitlvl
RU

Текст ⇄ двоичный / hex / ASCII

Введите текст и посмотрите его байты, либо вставьте двоичные, hex или десятичные байты и прочитайте их как текст. Таблица ниже показывает каждый символ, его кодовую точку и то, как его хранит UTF-8.

Результаты и сообщения этого инструмента выводятся на английском языке.

Текст — это числа

Компьютер хранит текст как числа. У каждого символа есть кодовая точка (буква A — 65, a — 97, 0 — 48), а кодировка определяет, как это число превращается в байты. ASCII покрывает 128 символов по одному байту каждый; Unicode покрывает более миллиона, а UTF-8 — кодировка, которая записывает их от одного до четырёх байт, оставляя ASCII без изменений.

Так, Hi — это 72 и 105, что в двоичном виде 01001000 и 01101001, а в hex — 48 69. Буква é с диакритикой — кодовая точка 233, но хранится как два байта, C3 A9; галочка ✓ — три байта, E2 9C 93; эмодзи — четыре.

Как UTF-8 упаковывает кодовую точку

Диапазон кодовых точекБайтРаскладка битов
U+0000 – U+007F10xxxxxxx
U+0080 – U+07FF2110xxxxx 10xxxxxx
U+0800 – U+FFFF31110xxxx 10xxxxxx 10xxxxxx
U+10000 – U+10FFFF411110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Старшие биты первого байта сообщают длину последовательности, а каждый байт продолжения начинается с 10. Такая конструкция позволяет декодеру ресинхронизироваться после ошибки, и именно поэтому в тексте UTF-8 можно искать побайтово.

Справка по ASCII

Печатаемый ASCII идёт от 32 (пробел) до 126 (~). Цифры — 48–57, заглавные буквы — 65–90, строчные — 97–122. Разница между верхним и нижним регистром — ровно бит 5 (значение 32), поэтому c | 0x20 переводит ASCII-букву в нижний регистр. Коды 0–31 — управляющие символы: 9 — табуляция, 10 — перевод строки, 13 — возврат каретки, 27 — escape.

Вопросы

Как перевести текст в двоичный код вручную?

Найдите ASCII-код каждого символа (A = 65), затем переведите это десятичное число в двоичное и дополните до 8 бит: 65 = 01000001. Не-ASCII символы сначала нужно превратить в байты UTF-8.

Почему один символ превращается в несколько байт?

Потому что UTF-8 использует 2, 3 или 4 байта для всего за пределами ASCII. é — это C3 A9, 日 — E6 97 A5, 😀 — F0 9F 98 80. Таблица под инструментом показывает это для каждого символа.

Какой двоичный код у буквы A?

01000001 (десятичное 65, hex 41). Строчная a — 01100001 (97, hex 61): то же самое с установленным битом 5.

Почему перевод из двоичного в текст выдаёт ошибку?

Каждая группа должна быть байтом (8 двоичных цифр или значение 0–255), а байты должны образовывать корректный UTF-8. Одиночный байт больше 127 или байт продолжения без ведущего байта — не валидный текст.

Это то же самое, что Base64?

Нет. Здесь показаны реальные байты текста в читаемой системе счисления. Base64 — другая, более плотная схема для передачи произвольных байтов в виде текста. См. инструмент Base64.