function base64_encode( data ) { // Encodes data with MIME base64
//
// + original by: Tyler Akins (http://rumkin.com)
// + improved by: Bayron Guevara
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1<<16 | o2<<8 | o3;
h1 = bits>>18 & 0x3f;
h2 = bits>>12 & 0x3f;
h3 = bits>>6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
switch( data.length % 3 ){
case 1:
enc = enc.slice(0, -2) + '==';
break;
case 2:
enc = enc.slice(0, -1) + '=';
break;
}
return enc;
}
Спасибо! Использую encode decode для простенькой шифровки/расшифровки.
Функция работает неправильно.
Hint: Смотрим спецификацию charCodeAt
Подтверждаю! Функция со спецсимволами и пр. юникодной изюминой работает неправильно! Вы бы хоть тестировали перед выкладкой, что ли...
Вот полностью рабочий вариант:
вот вариант для чтения бинариков на странице с вин1251 кодировкой
function base64en(str) { var b,c,out='', l=false,i=0, key6='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', key8='ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—!™љ›њќћџ'+String.fromCharCode(160)+'ЎўЈ¤Ґ¦§Ё©Є«¬'+String.fromCharCode(173)+'®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя', len = str.length; while (i<len) { out+=key6.charAt((b=(((c=str.charCodeAt(i++))>127)?((c==65533)?(152<<16):((((c=key8.indexOf(String.fromCharCode(c))|128)<0)?0:c<<16))):c<<16)|(((c=str.charCodeAt(i++))>127)?((c==65533)?152<<8:((((c=key8.indexOf(String.fromCharCode(c))|128)<0)?0:c<<8))):c<<8)|(((c=str.charCodeAt(i++))>127)?((c==65533)?152:((((c=key8.indexOf(String.fromCharCode(c))|128)<0)?0:c))):c))>>18)+key6.charAt(b>>12&63)+key6.charAt(b>>6&63)+key6.charAt(b&63); } return out; }скорость обработки 3-4 метров в секунду. так что норм.
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.