JSFiddle - React, Tailwind, and code Playground

JavaScript

// ----- encode 

let bytesToBase128 = (bytesArr) => {
    // 128 characters to encode as json-string
    let c= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz¼½ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 
    let fbits=[]; 
    let bits = (n,b=8) => [...Array(b)].map((x,i)=>n>>i&1);
    bytesArr.map(x=> fbits.push(...bits(x)));

    let fout=[]; 
    for(let i =0; i<fbits.length/7; i++) { 
	    fout.push(parseInt(fbits.slice(i*7, i*7+7).reverse().join(''),2))  
    }; 

    return (fout.map(x => c[x])).join('');
}


// ----- decode

let base128ToBytes = (base128str) => {
  // 128 characters to encode as json-string
	let c= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz¼½ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 

  dfout = base128str.split('').map(x=>c.indexOf(x));
  let dfbits = [];
  let bits = (n,b=8) => [...Array(b)].map((x,i)=>n>>i&1);
  dfout.map(x=> dfbits.push(...bits(x,7) ));

  let dfbytes=[]; 
  let m1 = dfbits.length%8 ? 1 : 0;
  for(let i =0; i<dfbits.length/8-m1; i++) { 
  	dfbytes.push(parseInt(dfbits.slice(i*8, i*8+8).reverse().join(''),2))  
  }; 

	return dfbytes;
}

// ------ Tested on Chrome, Firefos and Safari

console.clear();

// init
let size = 10;
let f32 = new Float32Array(size).fill(0.3); // input array

// code
let f32bytes = new Uint8Array(f32.buffer);
let f32json = bytesToBase128(f32bytes);

// decode
let df32bytes = base128ToBytes(f32json);
let df32 = new Float32Array(new Uint8Array(df32bytes).buffer);

// print
console.log('f32',f32);
console.log('f32bytes',f32bytes);
console.log('f32json',f32json);
console.log('df32bytes',df32bytes);
console.log('df32',df32);
console.log('f32 size', f32.length*4)
console.log('f32json size', f32json.length)