Titanium, alternative base64encode function; not the author, sorry I don't recall the original source for this; also untested in recent Ti versions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// alternative to built-in base64 encode function, which has outstanding bugs | |
// alternatively, use: | |
// String(Ti.Utils.base64encode(theBlob)).replace(/(\r\n|\n|\r)/gm,""); | |
function Base64EncodeAscii(str) { | |
if (/([^\u0000-\u00ff])/.test(str)) { | |
throw 'String must be ASCII'; | |
} | |
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | |
var o1, | |
o2, | |
o3, | |
bits, | |
h1, | |
h2, | |
h3, | |
h4, | |
e = [], | |
pad = '', | |
c; | |
c = str.length % 3; | |
// pad string to length of multiple of 3 | |
if (c > 0) { | |
while (c++ < 3) { | |
pad += '='; | |
str += '\0'; | |
} | |
} | |
// note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars | |
for (c = 0; c < str.length; c += 3) { // pack three octets into four hexets | |
o1 = str.charCodeAt(c); | |
o2 = str.charCodeAt(c + 1); | |
o3 = str.charCodeAt(c + 2); | |
bits = o1 << 16 | o2 << 8 | o3; | |
h1 = bits >> 18 & 0x3f; | |
h2 = bits >> 12 & 0x3f; | |
h3 = bits >> 6 & 0x3f; | |
h4 = bits & 0x3f; | |
// use hextets to index into code string | |
e[c / 3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); | |
} | |
str = e.join(''); | |
// use Array.join() for better performance than repeated string appends | |
// replace 'A's from padded nulls with '='s | |
str = str.slice(0, str.length - pad.length) + pad; | |
return str; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment