Наборы символов UTF-8
Base64 кодирует байты, а не символы. UTF-8 сначала превращает символы в один или несколько байтов; китайские символы и emoji занимают несколько. Несовпадение вызывает mojibake или ошибки декодирования.
Выберите явный charset
Документируйте UTF-8 на границах браузера, API и базы данных. Сначала декодируйте Base64 в байты, затем интерпретируйте эти байты как UTF-8.
Как обнаружить несовпадение
Если ASCII работает, а текст с акцентами нет, проверьте объявленный charset, преобразование переносов строк и вариант Base64 или Base64URL. Сравните длины в байтах.
Практическая проверка
Закодируйте café / 世界 / 🚀 через текстовый кодировщик, затем декодируйте и сравните исходные символы.