- How to Encode and Decode HTML Base64 using JavaScript – JS Encoding Example
- What is Base64?
- How to Encode and Decode HTML Base64 using JavaScript
- More JavaScript Encoding Examples
- Wrapping Up!
- Data URL
- Синтаксис
- Hello, World!
- Кодирование данных в формат base64
- Кодирование в Javascript
- Кодирование на Unix системах
- Кодирование на Microsoft Windows
- Распространённые проблемы
- Спецификации
- Совместимость с браузерами
How to Encode and Decode HTML Base64 using JavaScript – JS Encoding Example
Joel Olawanle
When building an application or writing a program, you may need to encode or decode with HTML Base64 in JavaScript.
This is possible thanks to two Base64 helper functions that are part of the HTML specification and are supported by all modern browsers.
In this article, you will learn about Base64 and how it works to convert binary data, regular strings, and lots more into ASCII text.
What is Base64?
Base64 is a group of binary-to-text encoding schemes representing binary data in ASCII string format. It is commonly used to encode data that needs to be stored or transmitted in a way that cannot be directly represented as text.
Base64 encoding works by mapping binary data to 64 characters from the ASCII character set. The 64 characters used in Base64 encoding are: A-Z , a-z , 0-9 , + , and / .
The encoding process takes 3 bytes of binary data and maps it to 4 characters from the above set, such that a single character represents every 6 bits of binary data. The result is a string of ASCII characters that can be transmitted or stored as text.
Base64 decoding is the reverse process of encoding. It takes a Base64 encoded string and maps each character back to its 6-bit binary representation. The resulting binary data is a reconstruction of the original binary data encoded to Base64.
How to Encode and Decode HTML Base64 using JavaScript
To encode and decode in JavaScript, you will use the btoa() and atob() JavaScript functions that are available and supported by modern web browsers.
These JavaScript helper functions are named after old Unix commands for converting binary to ASCII (btoa) and ASCII to binary (atob).
You can encode a string to base64 in JavaScript using the btoa() function and decode a base64 string using atob() function. For example, if you have a string stored in a variable, as seen below, you can first encode it to Base64:
let myString = "Welcome to freeCodeCamp!"; let encodedValue = btoa(myString); console.log(encodedValue); // V2VsY29tZSB0byBmcmVlQ29kZUNhbXAh
You can also decode the encodedValue back to its original form using the atob() function. This function takes the encoded value and decodes it from Base64:
let myString = "Welcome to freeCodeCamp!"; let encodedValue = btoa(myString); let decodedValue = atob(encodedValue); console.log(decodedValue); // Welcome to freeCodeCamp!
You now know how to encode and decode Base64 in JavaScript.
More JavaScript Encoding Examples
You can also encode binary data to Base64 encoded ASCII text in JavaScript using the btoa() function:
let binaryData = new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]); let stringValue = String.fromCharCode.apply(null, binaryData); console.log(stringValue); // "Hello World" let encodedValue = btoa(stringValue); console.log(encodedValue); // SGVsbG8gV29ybGQ=
In the above, you first converted Unicode values to characters and then encoded the string.
You can also decode the Base64 encoded ASCII text to binary data in JavaScript using the atob() function:
let encodedValue = "SGVsbG8gV29ybGQ="; let binaryData = new Uint8Array(atob(encodedValue).split("").map(function (c) < return c.charCodeAt(0); >)); console.log(binaryData); // Uint8Array [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
Wrapping Up!
In this article, you have learned what Base64 means, how it works, and when to encode and decode in JavaScript.
Base64 is not intended to be a secure encryption method, nor is it intended to be a compression method, because encoding a string to Base64 typically results in a 33% longer output.
Base64 encoding is commonly used in JavaScript for situations like:
- Storing and transmitting binary data as text.
- Encrypting data where the encoded data is sent over an insecure channel and decoded on the other end. However, it should not be considered a secure encryption method, as it can easily be decoded.
- Data transfer between systems with different character sets.
- Storing binary data in a database.
Thanks for reading and have fun coding!
You can access over 185 of my articles by visiting my website. You can also use the search field to see if I’ve written a specific article.
Data URL
Data URL, URL имеющий приставку data: , делает возможным встраивание файлов небольшого размера прямо в документ.
Примечание: современные браузеры обрабатывают Data URL, как неявный уникальный origin, и не заимствуют значение origin из объекта настроек ответственного за навигацию.
Синтаксис
Data URL состоит из четырёх сегментов: приставки ( data: ), MIME типа, описывающего тип данных, дополнительного ключевого слова base64 для нетекстовых данных и самой строки данных:
тип данных описывается строкой в формате MIME типа, например ‘image/jpeg’ для JPEG файла изображения. При не указывании типа данных, браузер автоматически будет интерпретировать строку данных, как text/plain;charset=US-ASCII
Если данные представляют собой какую-либо текстовую информацию, вы можете просто вставить эту текстовую строку в Data URL (используя соответствующие для типа данных сущности и знаки экранирования). В ином случае вам будет необходимо использовать ключевое слово base64 перед вставкой base64-кодированных бинарных данных. Дополнительную информацию о MIME типах вы сможете найти здесь и здесь (en-US) .
base64-кодированная версия примера выше
HTML строка вида:
Hello, World!
HTML строка, вызывающая JavaScript alert функцию. Заметьте необходимость закрывающего тега.
Кодирование данных в формат base64
Base64 относится к группе транспортных кодировок, и позволяет представлять бинарные данные в виде ASCII строк, переводя их в radix-64 представление. Состоя только из ASCII символов, base64 строки являются допустимыми для использования в URL, по этой причине они могут быть использованы и в Data URL.
Кодирование в Javascript
Web API имеет встроенные методы для кодирования и декодирования формата base64: Base64 кодирование и декодирование.
Кодирование на Unix системах
На Linux и Mac OS X системах, кодирование файлов или строк в формат Base64 может быть выполнено через программу base64 в командной строке (или, в качестве альтернативы, программу uuencode с -m аргументом).
echo -n hello|base64 # выводит в консоль: aGVsbG8= echo -n hello>a.txt base64 a.txt # выводит в консоль: aGVsbG8= base64 a.txt>b.txt # записывает в файл b.txt: aGVsbG8=
Кодирование на Microsoft Windows
Кодирование на Windows может быть выполнено через powershell или какую-либо другую предназначенную для этого программу. Так же кодирование может быть выполнено и через программу base64 (смотрите секцию Кодирование на Unix системах), при условии активированной технологии WSL.
[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello")) # выводит в консоль: aGVsbG8= bash -c "echo -n hello`|base64" # выводит в консоль: aGVsbG8= # обратный апостроф (`) используется здесь для экранирования символа вертикальной черты (|)
Распространённые проблемы
Эта секция описывает ряд проблем, которые могут возникнуть при использовании Data URL.
Для примера рассмотрим Data URL вида:
результатом декодирования которого будет HTML строка:
Data URL представляет собой простой формат, но даже в нём можно забыть добавить запятую перед сегментом данных или произвести ошибку во время их base64 кодирования.
Форматирование внутри документа
Встраивание Data URL по сути является встраиванием файла внутрь файла, и длина его строки может быть намного шире, чем ширина заключающего его документа. Так же, несмотря на то, что использование пробелов считается обычной практикой при форматировании данных, есть вероятность, что у вас возникнут проблемы при их base64 кодировании.
Хотя Firefox поддерживает Data URL практически неограниченных размеров, каждый отдельный браузер имеет свои ограничения на их длину. Например, Opera 11 ограничивает допустимую длину URL до 65535 символов, что означает ограничение сегмента данных в Data URL до 65529 символов (длина в 65529 символов взята из условия использования только только data: сегмента, без определения MIME типа данных).
Нехватка возможности обработки ошибок
Опечатки в определении MIME типа или написания ключевого слова ‘base64’ будут проигнорированы без каких-либо уведомлений об ошибках.
Отсутствие поддержки строки параметров
В связи с неопределённостью типа сегмента данных в Data URL, строка параметров (характерные для страницы параметры, представляющиеся в виде ?parameter-data ), добавленная к сегменту данных будет рассматриваться, как часть этих данных.
Несколько проблем с безопасностью (например: фишинг) связаны с Data URL и переходом по ним из корневого контекста документа. Чтобы избавиться от этих проблем, переход по URI, начинающихся со схемы data:// , из корневого контекста документа перестал быть возможен в Firefox, начиная с версии 59 (и начиная с версии 58 в Nightly/Beta вариантах браузера). Надеемся, что остальные браузеры так же последуют этому примеру. Для дополнительной информации смотрите Blocking Top-Level Navigations to data URLs for Firefox 58.
Спецификации
Совместимость с браузерами
BCD tables only load in the browser