Особенности кодировки строк в Base64 в JavaScript

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Кодировка (encoding) и декодирование (decoding) в Base64 — распространенный способ преобразования двоичных данных в безопасный текст. Он часто используется в Data URL, таких как встроенные (inline) изображения.


Прим. пер.: с помощью data URL можно решить проблему (ошибку) отсутствующей фавиконки в браузере.


<link rel="icon" href="data:." />

Что происходит при кодировке и декодировании в base64 строк в JS? В этой статье мы рассмотрим некоторые особенности и ловушки, связанные с этими процессами.


btoa() и atob()


Основными функциями для кодировки и декодирования строк в base64 в JS являются btoa() и atob(), соответственно. btoa() (binary to ASCII) кодирует строку в base64, а atob() (ASCII to binary) декодирует.


Пример:


// Обычная строка, состоящая из кодовых точек (code points) ниже 128.
const asciiString = 'hello';

// Работает
const asciiStringEncoded = btoa(asciiString);
console.log(`Encoded string: [${asciiStringEncoded}]`);
// Encoded string: [aGVsbG8=]

// Работает
const asciiStringDecoded = atob(asciiStringEncoded);
console.log(`Decoded string: [${asciiStringDecoded}]`);
// Decoded string: [hello]

К сожалению, как отмечается в статье MDN, это работает только со строками, содержащими символы ASCII или символы, которые могут быть представлены одним байтом. Другими словами, это не будет работать с Unicode.


Рассмотрим следующий пример:


// Строка, представляющая собой сочетание маленьких, средних и больших кодовых точек.
// Эта строка является валидным UTF-16.
// 'hello' состоит из кодовых точек ниже 128.
// '⛳' - это одна 16-битная кодовая единица.
// '❤️' - это две 16-битных кодовых единицы: U+2764 и U+FE0F (сердце и вариант (variant)).
// '						
Источник: https://habr.com/ru/articles/769256/


Интересные статьи

Интересные статьи

На Хабре уже проскакивали упоминания о совместимых или систем-копий Wolfram Mathematica, но реализованных на других языка, как, скажем, Mathics. В качестве расширения этой ниши я представлю молодую си...
Для многих разработчиков процесс установки зависимостей представляет собой некую "магию", которая происходит при выполнении npm install. Понимание принципов работы этой "магии" может сильно помочь при...
В современной веб разработке сложно переоценить значение такого инструмента как кэш. Мы сохраняем результаты выполнения длительных, дорогостоящих или часто выполняемых операций в некое хранилище, обра...
Научный консультант — кандидат исторических наук доцент Кирьянова Елена Георгиевна Типографика считается древнейшей разновидностью промышленного дизайна. С середины XV в. книга обретае...
Измерение времени, которое уходит на выполнение функции — это хороший способ доказательства того, что одна реализация некоего механизма является более производительной, чем другая. Это позволяет ...