@timofeus91
Junior Frontend Developer

Как правильно закодировать в base64?

У меня задача по закодированию данных для использования их при создании нового элемента. Код ниже (он из примера мозиллы) отлично работает, но меня смущает предупреждение о том что unescape устарел. Я пытался изменить функцию, но постоянно ловлю ошибки. Как можно выполнить такой код более современными способами?

function utf8_to_b64(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Синхронно это можно сделать так:
var text = 'Привет, мир!';

var u8a = new TextEncoder().encode(text);

var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

var bytes = u8a, i, len = bytes.length, base64 = '';

for (i = 0; i < len; i += 3) {
	base64 += chars[bytes[i] >> 2];
	base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
	base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
	base64 += chars[bytes[i + 2] & 63];
}

if (len % 3 === 2) {
	base64 = base64.substring(0, base64.length - 1) + '=';
}

else if (len % 3 === 1) {
	base64 = base64.substring(0, base64.length - 2) + '==';
}

console.log(base64);

Асинхронно через FileReader: https://learn.javascript.ru/file#filereader

P. S. Асинхронный способ:
var text = 'Привет, мир!';

var blob = new Blob([ text ]);

var reader = new FileReader();

reader.readAsDataURL(blob);

reader.onload = function() {
	
	var base64 = reader.result.split(',')[1];
	
	console.log(base64);
	
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы