Секретные записки WEB-программиста




100mbru, bitrix, CentOS, cms, drupal, java, joomla, LAMP, linux, mysql, nicru, Open-Source, php, Red Hat, seo, Typo3, ubuntu, win, windows, авто, администрирование, алгоритмы, алкоголь, бизнес, битрикс, видео, военмех, выборы, германия, джино, домены, интересности, исследования, картинки, кино, компьютеры, ливия, магазин, маразм, мастерхост, обработка-изображений, пейнтбол, политика, политэкономия, прикольное-видео, программирование, путешествия, работа, религия, рунет, сайтостроение, сео, сми, технологии, украина, форум, хиханьки, холивары, хостинг

Base64 в JavaScript и UTF-8

15.11.2019

В 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);