Загрузить файл
  1. base64hub
  2. Текстовые инструменты
  3. UTF-8 в Base64

UTF-8 в Base64: кодирование Unicode-текста и эмодзи

Каждый символ превращается в свои байты UTF-8, а они кодируются в Base64. Поэтому эмодзи, диакритика и любая письменность передаются байт в байт и везде декодируются одинаково.

Бесплатно без регистрации и ограничений Локально ничего не загружается 1–4 байта на символ в UTF-8 Обновлено 27 окт. 2026 г.
Ввод 0 BРезультат 0 BРазмер –

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как закодировать текст UTF-8 в Base64

  1. Введите или вставьте текст в поле Ввод · текст. В поле Кодировка уже выбран UTF-8.
  2. Base64 появляется в поле Результат · Base64. Счётчик Ввод под инструментом показывает число байтов в UTF-8, а счётчик над полем считает символы так, как это делает JavaScript, поэтому эмодзи идёт за 2.
  3. Для URL и токенов отметьте URL-safe (- _) и Без дополнения (=), а для почты или PEM выберите Перенос строк.
  4. Скопируйте результат или скачайте его как base64.txt.

Base64 в UTF-8 превращает результат обратно в текст.

Как UTF-8 превращает символы в байты

UTF-8 тратит от 1 до 4 байтов на кодовую точку. ASCII остаётся в 1 байте, поэтому английский текст кодируется одинаково в UTF-8 и ASCII. Всё остальное занимает больше:

СимволКодовая точкаБайты UTF-8Base64
AU+004141QQ==
éU+00E9C3 A9w6k=
€U+20ACE2 82 AC4oKs
日本語U+65E5 U+672C U+8A9E9 байтов, по 3 на символ5pel5pys6Kqe
😀U+1F600F0 9F 98 808J+YgA==

Base64 добавляет к байтам ещё треть, так что предложение на китайском или японском при переходе от символов к символам Base64 вырастает примерно вчетверо, а один эмодзи превращается в 8 символов. Помните об этом, если у поля есть ограничение длины; поможет калькулятор размера.

Последовательности эмодзи и оттенки кожи

То, что выглядит как один эмодзи, часто состоит из нескольких склеенных кодовых точек. Оттенок кожи задаётся отдельным модификатором, а эмодзи семей и профессий соединяют нескольких человек невидимым соединителем нулевой ширины (U+200D):

ЭмодзиКодовых точекБайтов UTF-8Base64
😀148J+YgA==
👍🏽2 (большой палец + средний оттенок кожи)88J+RjfCfj70=
👨‍👩‍👧5 (три человека + два соединителя)188J+RqOKAjfCfkanigI3wn5Gn

Если разрезать строку Base64 или её декодированные байты посреди такой последовательности, останутся битые символы, так что никогда не обрезайте закодированный UTF-8 на произвольном байте.

Один текст, разные байты: нормализация Unicode

У некоторых символов в Unicode два корректных написания. é может быть одной кодовой точкой U+00E9 (составная форма, NFC) или e, за которой идёт U+0301 COMBINING ACUTE ACCENT (разложенная форма, NFD). Выглядят они одинаково, но байты разные:

ТекстФормаБайтыBase64
éNFCC3 A9w6k=
éNFD65 CC 81ZcyB
naïveNFC6bmHDr3Zl
naïveNFD7bmFpzIh2ZQ==

Имена файлов в старой файловой системе Apple HFS+ хранятся в разложенной форме, а большинство клавиатур выдают составной текст. Если вы сравниваете значения Base64, подписываете их или используете как ключи, сначала нормализуйте. Этот инструмент кодирует ровно те кодовые точки, которые вы вставили, и ничего не нормализует.

UTF-8 в Base64 в коде

В JavaScript TextEncoder всегда выдаёт UTF-8. Если ввод может приходить из разных источников, сначала нормализуйте:

const text = "e\u0301".normalize("NFC");
Buffer.from(text, "utf8").toString("base64");   // "w6k=" (Node.js)
new TextEncoder().encode(text);                  // Uint8Array [195, 169]

В браузерах байты из TextEncoder можно передать в bytes.toBase64(), где он поддерживается (Uint8Array.toBase64), или через вспомогательную функцию на btoa со страницы о JavaScript.

import base64, unicodedata

s = unicodedata.normalize("NFC", "nai\u0308ve")
base64.b64encode(s.encode("utf-8")).decode()   # 'bmHDr3Zl'

Про файлы и потоковую обработку читайте в статье Base64 в Python.

Вопросы и ответы

Чем Base64 от UTF-8 отличается от обычного Base64?

Ничем. Base64 всегда кодирует байты, а «UTF-8 в Base64» лишь уточняет, какие именно. Для простого ASCII-текста байты UTF-8 совпадают с байтами ASCII, так что результат одинаковый в обоих случаях.

Почему две одинаковые на вид строки дают разный Base64?

В Unicode некоторые символы можно записать несколькими способами. é как одна кодовая точка кодируется в w6k=, а e плюс комбинируемое ударение – в ZcyB. Если значения должны совпадать, приведите текст к NFC перед кодированием.

Добавляет ли кодировщик метку порядка байтов UTF-8 (BOM)?

Нет. Результат начинается сразу с байтов вашего текста. Если получатель требует BOM, Base64 должен начинаться с 77u/ (так кодируются байты EF BB BF).

Сколько байтов занимает эмодзи?

Одна кодовая точка эмодзи занимает в UTF-8 4 байта. Эмодзи с оттенком кожи или семьи состоят из нескольких кодовых точек: 👍🏽 занимает 8 байтов, а семья 👨‍👩‍👧 – 18.