Конвертер текста в двоичный код

→
Текст → байты UTF-8 → по 8 двоичных цифр на байт, через пробел

Текст в двоичный код: как строка выглядит на уровне байтов

Что делает эта конвертация

Инструмент кодирует текст в байты по стандарту UTF-8, а затем записывает каждый байт восемью двоичными цифрами. Арифметики здесь нет: символ ищется в таблице кодировки и выписывается, — но результат и есть та самая последовательность единиц и нулей, которая хранилась бы или передавалась по сети для этой строки.

Почему UTF-8, а не чистый ASCII

ASCII определяет всего 128 символов: этого с запасом хватает английскому и совсем не хватает всему остальному. UTF-8 оставляет первые 128 кодов неотличимыми от ASCII и разводит остальные по двум, трём или четырём байтам, поэтому английская строка даёт ровно те же байты, что и ASCII, а кириллица, иероглифы и эмодзи всё равно работают. Отсюда и разброс: латинская A — один байт (01000001), русская Я — два, иероглиф 中 — три, а большинство эмодзи — четыре.

Таблица перевода текста в двоичный код

Короткие строки и их двоичные байтовые последовательности. Интереснее всего строки с многобайтовыми символами: они показывают, как один символ превращается в группу байтов, у каждого из которых узнаваемый ведущий шаблон.

ТекстДвоичная
A01000001
Hi01001000 01101001
OK01001111 01001011
12300110001 00110010 00110011
!00100001
Go01000111 01101111

Байт, которого вы не ждали

Самая частая неожиданность в работе с текстом — строка, которая длиннее, чем выглядит. Пять символов могут занимать пять байтов или пятнадцать, смотря по письменности, и любой лимит, выраженный в символах, будет нарушен лимитом, выраженным в байтах. Байтовая последовательность делает это наглядным: ведущие биты каждого байта в многобайтовом символе сами сообщают, сколько байтов занимает символ.

Байты и символы считаются по-разному

Когда столбец базы данных, ограничение API или поле заголовка измеряются в байтах, считайте байты, а не символы. Конвертер показывает байтовую последовательность напрямую, поэтому число групп равно числу байтов — именно эту величину такие ограничения и проверяют.

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

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

Каждый символ ищется в таблице кодировки UTF-8 и заменяется своим байтом или байтами, а затем каждый байт записывается восемью двоичными цифрами. Латинская A — это байт 65, то есть 01000001, и она занимает ровно один байт, потому что попадает в исходный диапазон ASCII.

Почему один иероглиф занимает больше одного байта?

Потому что UTF-8 должен охватить куда больше 256 символов, и всё, что выходит за первые 128, раскладывается по двум, трём или четырём байтам. Один иероглиф обычно занимает три байта — поэтому здесь он и выглядит как три группы по восемь цифр, а не как одна.

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

Для простого английского текста — да: UTF-8 устроен так, что первые 128 кодов побайтово совпадают с ASCII, и «Hello» кодируется одинаково в обоих стандартах. Они расходятся ровно там, где появляется буква с диакритикой, символ валюты или любая нелатинская письменность: ASCII тут ничего не может предложить, а UTF-8 может.

Почему байты разделены пробелами?

Потому что сплошной поток двоичных цифр нечитаем и его легко пересчитать неверно, а группы по восемь цифр показывают границы байтов сразу. Пробелы во вводе игнорируются при декодировании, поэтому последовательность можно скопировать с этой страницы и вставить в обратный инструмент без правок.

Эмодзи тоже поддерживаются?

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

Скопируйте приведённый ниже код и вставьте его на свой сайт, чтобы добавить этот конвертер.

<!-- Текст в двоичный код -->
<iframe src="https://unitflow.net/ru/embed/text-to-binary" title="Текст в двоичный код" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/ru/text-to-binary" target="_blank" rel="noopener">Работает на UnitFlow</a></p>