Конвертер текста в двоичный код
Перевод текста в последовательность нулей и единиц для каждого символа.
Если перевести букву A в двоичный вид, получится аккуратная цепочка из восьми знаков: 01000001. Тот же перевод для эмодзи даст результат в четыре раза длиннее, поскольку стандарт UTF-8 не мог вместить письменности всего мира в исходные семь бит, на которых когда-то строилась таблица ASCII.
Байты и биты в конвертере текста в двоичный код
Символ A имеет десятичный номер 65 в таблице ASCII. В двоичном представлении это выглядит как 01000001: если считать справа налево, разряды соответствуют значениям 1, 2, 4, 8, 16, 32, 64 и 128, а сумма 64 и 1 дает как раз 65. Текст в памяти — это цепочка таких восьмибитных блоков, по одному на символ.
Строчная буква a с кодом 97 записывается как 01100001. Это точно такой же набор битов, как у заглавной A, но с включенным битом со значением 32. Именно поэтому разница между строчными и прописными буквами латиницы всегда строго равна 32 позициям.
Границы ASCII и кодировка UTF-8
Первые 128 позиций в UTF-8 намеренно сделаны байт в байт идентичными стандарту ASCII: они занимают один байт, а старший бит всегда равен 0. Поэтому базовая латиница выглядит одинаково независимо от того, как ее интерпретируют.
За пределами кода 127 в UTF-8 включается многобайтовая схема. Начало байта с 110 указывает на последовательность из двух байтов, 1110 — из трех байтов, а 11110 обозначает четыре байта. Все последующие байты внутри символа начинаются с комбинации 10, что позволяет безошибочно отличать продолжение знака от начала нового.
Многобайтовое представление на примере символа é
Возьми букву é с кодом Unicode 233. В один байт она не помещается, поэтому UTF-8 отводит под нее два байта: 11000011 10101001 (в шестнадцатеричной записи это C3 A9). Стартовые биты 110 задают длину в два байта, а биты 10 обозначают байт продолжения.
Многие эмодзи расположены еще дальше и требуют предельные четыре байта стандарта UTF-8 со стартовым префиксом 11110. По этой причине значки и эмодзи занимают значительно больше битов, чем привычные буквы латиницы.
Ошибки при обработке многобайтовых знаков конвертером текста в двоичный код
- В кодировке ASCII нет номеров выше 127, поэтому символы с диакритикой и эмодзи в нее просто не помещаются.
- Если считывать многобайтовую строку строго по одному байту без поддержки UTF-8, символ распадется на бессмысленные фрагменты.
- Именно так возникает искажение текста, когда читаемые слова превращаются в цепочки вопросительных знаков или случайных знаков из-за неверной кодировки.
Вопросы о конвертере текста в двоичный код
Сколько бит содержит один символ текста?
Базовый знак ASCII занимает восемь бит, то есть один байт. Символы UTF-8 за пределами диапазона ASCII занимают два, три или четыре байта, то есть 16, 24 или 32 бита в зависимости от блока Unicode.
Почему буква A кодируется именно как 01000001?
В стандарте ASCII 1963 года заглавной A присвоили число 65. При разложении 65 по степеням двойки (1, 2, 4, 8, 16, 32, 64 и 128) складываются 64 и 1, образуя комбинацию 01000001.
Теряются ли данные при переводе текста в двоичный код?
Нет, если исходная кодировка известна и сохраняется неизменной. Двоичная запись просто отображает те же самые байты, которыми компьютер сохраняет текст.
Почему в одних записях по 7 бит на знак, а в других по 8?
Исходная таблица ASCII требовала всего семь бит для 128 значений. Но память компьютеров организована в 8-битные байты, поэтому слева обычно дописывают ведущий ноль.
Можно ли вернуть двоичный код обратно в обычный текст?
Да, достаточно разбить поток нулей и единиц на 8-битные группы, перевести каждую в числовое значение байта и сопоставить с таблицей символов нужной кодировки.