forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | (function () { | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | function utf8ToBinaryString(str) { | ||
|  |   var escstr = encodeURIComponent(str); | ||
|  |   // replaces any uri escape sequence, such as %0A,
 | ||
|  |   // with binary escape, such as 0x0A
 | ||
|  |   var binstr = escstr.replace(/%([0-9A-F]{2})/g, function(match, p1) { | ||
|  |     return String.fromCharCode('0x' + p1); | ||
|  |   }); | ||
|  | 
 | ||
|  |   return binstr; | ||
|  | } | ||
|  | 
 | ||
|  | function utf8ToBuffer(str) { | ||
|  |   var binstr = utf8ToBinaryString(str); | ||
|  |   var buf = binaryStringToBuffer(binstr); | ||
|  |   return buf; | ||
|  | } | ||
|  | 
 | ||
|  | function utf8ToBase64(str) { | ||
|  |   var binstr = utf8ToBinaryString(str); | ||
|  |   return btoa(binstr); | ||
|  | } | ||
|  | 
 | ||
|  | function binaryStringToUtf8(binstr) { | ||
|  |   var escstr = binstr.replace(/(.)/g, function (m, p) { | ||
|  |     var code = p.charCodeAt(p).toString(16).toUpperCase(); | ||
|  |     if (code.length < 2) { | ||
|  |       code = '0' + code; | ||
|  |     } | ||
|  |     return '%' + code; | ||
|  |   }); | ||
|  | 
 | ||
|  |   return decodeURIComponent(escstr); | ||
|  | } | ||
|  | 
 | ||
|  | function bufferToUtf8(buf) { | ||
|  |   var binstr = bufferToBinaryString(buf); | ||
|  | 
 | ||
|  |   return binaryStringToUtf8(binstr); | ||
|  | } | ||
|  | 
 | ||
|  | function base64ToUtf8(b64) { | ||
|  |   var binstr = atob(b64); | ||
|  | 
 | ||
|  |   return binaryStringToUtf8(binstr); | ||
|  | } | ||
|  | 
 | ||
|  | function bufferToBinaryString(buf) { | ||
|  |   var binstr = Array.prototype.map.call(buf, function (ch) { | ||
|  |     return String.fromCharCode(ch); | ||
|  |   }).join(''); | ||
|  | 
 | ||
|  |   return binstr; | ||
|  | } | ||
|  | 
 | ||
|  | function bufferToBase64(arr) { | ||
|  |   var binstr = bufferToBinaryString(arr); | ||
|  |   return btoa(binstr); | ||
|  | } | ||
|  | 
 | ||
|  | function binaryStringToBuffer(binstr) { | ||
|  |   var buf; | ||
|  | 
 | ||
|  |   if ('undefined' !== typeof Uint8Array) { | ||
|  |     buf = new Uint8Array(binstr.length); | ||
|  |   } else { | ||
|  |     buf = []; | ||
|  |   } | ||
|  | 
 | ||
|  |   Array.prototype.forEach.call(binstr, function (ch, i) { | ||
|  |     buf[i] = ch.charCodeAt(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   return buf; | ||
|  | } | ||
|  | 
 | ||
|  | function base64ToBuffer(base64) { | ||
|  |   var binstr = atob(base64); | ||
|  |   var buf = binaryStringToBuffer(binstr); | ||
|  |   return buf; | ||
|  | } | ||
|  | 
 | ||
|  | window.Unibabel = { | ||
|  |   utf8ToBinaryString: utf8ToBinaryString | ||
|  | , utf8ToBuffer: utf8ToBuffer | ||
|  | , utf8ToBase64: utf8ToBase64 | ||
|  | , binaryStringToUtf8: binaryStringToUtf8 | ||
|  | , bufferToUtf8: bufferToUtf8 | ||
|  | , base64ToUtf8: base64ToUtf8 | ||
|  | , bufferToBinaryString: bufferToBinaryString | ||
|  | , bufferToBase64: bufferToBase64 | ||
|  | , binaryStringToBuffer: binaryStringToBuffer | ||
|  | , base64ToBuffer: base64ToBuffer | ||
|  | 
 | ||
|  | // compat
 | ||
|  | , strToUtf8Arr: utf8ToBuffer | ||
|  | , utf8ArrToStr: bufferToUtf8 | ||
|  | , arrToBase64: bufferToBase64 | ||
|  | , base64ToArr: base64ToBuffer | ||
|  | }; | ||
|  | 
 | ||
|  | }()); |