Как декодировать Base64 в UTF-8
- Вставьте Base64 в поле Ввод · Base64. В поле Кодировка уже выбран UTF-8.
- Результат появится в поле Результат · текст. Строка статуса показывает число байтов и определённый тип содержимого.
- Если в строке статуса написано «Часть байтов не читается как UTF-8», текст в другой кодировке. Попробуйте Автоопределение, Windows-1252 или UTF-16LE.
- Скопировать результат копирует текст, Скачать сохраняет декодированные байты без изменений.
Для обратного направления есть UTF-8 в Base64.
Примеры
| Base64 | Результат в UTF-8 | Что показывает |
|---|---|---|
8J+YgA== | 😀 | Один эмодзи, 4 байта |
4oKs | € | 3 байта, дополнение не нужно |
bmHDr3ZlIGNhZsOp | naïve café | Буквы с диакритикой, по 2 байта |
77u/SGk= | Hi | 5 байтов: метка порядка байтов, затем Hi |
Y2Fm6Q== | caf� | E9 означает é в Latin-1, в UTF-8 недопустим |
8J+Y | � | Эмодзи, обрезанный после 3 из 4 байтов |
Y2Fmw4PCqQ== | café | Корректный UTF-8 уже испорченного текста |
Последние три строки показывают случаи, которые стоит узнавать с первого взгляда.
Некорректный UTF-8 и символ замены
Правила UTF-8 строгие: байт больше 7F должен входить в последовательность из 2, 3 или 4 байтов с фиксированным шаблоном. Байты, которые нарушают шаблон, прочитать как UTF-8 нельзя. Декодер заменяет каждую битую последовательность на U+FFFD (�) и добавляет пометку «Часть байтов не читается как UTF-8. Попробуйте другую кодировку». Молча ничего не выбрасывается, поэтому каждый � указывает точное место проблемы.
Почти всегда причина одна из двух:
- Другая кодировка. В
Y2Fm6Q==лежат байты63 61 66 E9, то естьcaféв ISO-8859-1 и Windows-1252. Смените Кодировку, и текст появится. На странице декодера Base64 собраны типичные симптомы для каждой кодировки. - Обрезанная строка. Если Base64 обрезали, например из-за ограничения длины столбца в базе данных или строки лога, последний символ может лишиться части байтов.
8J+YgA==кодирует целый эмодзи, а8J+Yтот же эмодзи без последнего байта, и декодируется он в один�. Ищите полное значение в источнике.
Двойная кодировка (é и ’)
Если вместо é выводится é, вместо ü появляется ü, а вместо типографского апострофа ’, декодер не виноват. Где-то раньше байты UTF-8 прочитали как Windows-1252 и снова сохранили в UTF-8, и каждый особый символ превратился в два-три неправильных. Base64 честно хранит этот испорченный текст: Y2Fmw4PCqQ== содержит корректный UTF-8 для семибайтовой строки café.
Часто такую строку можно починить в коде, повторив ошибку в обратную сторону: закодировать текст в Windows-1252 и прочитать байты как UTF-8. Но по-настоящему исправлять нужно систему, которая его записала.
Метка порядка байтов (BOM)
Некоторые редакторы, особенно в Windows, начинают файлы UTF-8 с метки порядка байтов, то есть с байтов EF BB BF. В Base64 такой файл начинается с 77u/. Декодер распознаёт метку и не включает её в текст, а Скачать сохраняет байты в точности как были. В коде её, возможно, придётся убрать самостоятельно:
import base64
raw = base64.b64decode("77u/SGk=")
raw.decode("utf-8") # '\ufeffHi'
raw.decode("utf-8-sig") # 'Hi'
base64.b64decode("Y2Fm6Q==").decode("utf-8", errors="replace") # 'caf�'
Без errors="replace" Python выбрасывает UnicodeDecodeError на некорректных байтах. В JavaScript new TextDecoder("utf-8", { fatal: true }) вместо вставки � выбрасывает TypeError, а декодер по умолчанию убирает BOM так же, как этот инструмент. Подробнее в статьях Base64 в Python и Base64 в JavaScript.
Вопросы и ответы
Как декодировать Base64 в строку UTF-8?
Сначала декодируйте Base64 в байты, затем прочитайте байты как UTF-8. Выше это делается за один шаг. В Python для этого есть base64.b64decode(s).decode("utf-8"), в браузере new TextDecoder().decode(bytes).
Что означает символ � в результате?
Это U+FFFD, символ замены. Декодер вставляет его там, где байты не складываются в корректный UTF-8. Обычно это значит, что текст был в другой кодировке или Base64 обрезан.
Почему декодированный текст начинается с невидимого символа?
Скорее всего, в исходнике была метка порядка байтов UTF-8 (Base64 начинается с 77u/). Этот инструмент её убирает, а обычный .decode("utf-8") в Python оставляет как \ufeff; чтобы её удалить, используйте "utf-8-sig".
Мой Base64 точно в UTF-8?
Скорее всего, да. JSON, веб, Linux и современные API работают в UTF-8. Данные из старых программ под Windows или строки .NET и PowerShell могут оказаться в Windows-125x или UTF-16.