Base64 в JavaScript и UTF-8
- Главная
- >
- Статьи и переводы
- Base64 в JavaScript и UTF-8
- >
В JavaScript есть две функции для декодирования и кодирования строк base64:
btoa()
– кодирует строку в Base64:
var value = window .btoa( "Encode a string" ); console .log(value);
atob()
– декодирует:
var value = window .atob( "RW5jb2RlIGEgc3RyaW5n" ); console .log(value);
Но в большинстве браузеров они не работают с кириллицей в UTF-8 и символами эмодзи.
В консоле браузера будет ошибка:
Uncaught DOMException: Failed to execute "btoa" on "Window": The string to be encoded contains characters outside of the Latin1 range.
Исправить это можно так:
Кодирование
function utf8_to_b64 ( str ) { return window .btoa( unescape ( encodeURIComponent (str))); } var value = utf8_to_b64( "Текст с эмодзи 😀😃😄" ); console .log(value);
Декодирование
function b64_to_utf8 ( str ) { return decodeURIComponent ( escape ( window .atob(str))); } var value = b64_to_utf8( "0KLQtdC60YHRgiDRgSDRjdC80L7QtNC30Lgg8J+YgPCfmIPwn5iE" ); console .log(value);