В JavaScript есть две функции для декодирования и кодирования строк base64:
btoa()
– кодирует строку в Base64:
atob()
– декодирует:
Но в большинстве браузеров они не работают с кириллицей в UTF-8 и символами эмодзи.
В консоле браузера будет ошибка:
Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
Исправить это можно несколькими способами:
Метод предложенный Johan Sundström:
Кодирование
function utf8_to_b64(str) {
return window.btoa(unescape(encodeURIComponent(str)));
}
var value = utf8_to_b64('Текст с эмодзи 😀😃😄');
console.log(value);
Декодирование
Мини-библиотека base64.js (5kb), которая предварительно конвертирует строку в UTF-8.
Кодирование
Декодирование
var value = Base64.decode('0KLQtdC60YHRgiDRgSDRjdC80L7QtNC30Lgg8J+YgPCfmIPwn5iE');
console.log(value);
Если кодировка HTML страницы в UTF-8, то метод Base64.decode
вернет кракозябры т.к. происходит двойная перекодировка.