Nyttig Base64-kode starter med å bestemme hva inngangen faktisk er. En JavaScript-streng trenger en tegnkoding; en fil har allerede byte; en JSON verdi må serialiseres først. Å holde disse trinnene synlige gjør feilsøking enklere og forhindrer utilsiktet dobbelkoding.
Kod inn en liten JSON verdi
Serialiser verdien nøyaktig én gang, kod den strengen som UTF-8, og kod deretter bytene som Base64. Dette eksemplet inkluderer et ikke-ASCII-felt for å fange opp implementeringer som bare fungerer med engelsk. Den er beregnet for små nyttelaster; den midlertidige bytestrengen øker minnebruken.
const value = { message: '你好', count: 3 };
const text = JSON.stringify(value);
let binary = '';
for (const byte of new TextEncoder().encode(text)) {
binary += String.fromCharCode(byte);
}
const encoded = btoa(binary);
const bytes = Uint8Array.from(atob(encoded), c => c.charCodeAt(0));
const json = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
console.log(JSON.parse(json).message); // 你好
En vellykket Base64-dekoding garanterer ikke gyldig JSON. Behandle UTF-8 dekode og JSON.parse som separate feilpunkter. Når det dekodede innholdet allerede er en streng som inneholder JSON, vil serialisering av det igjen legge til anførselstegn og escapes; som endrer nyttelasten.
Les en valgt fil som byte
For en nettleser File, bruk arrayBuffer() når du trenger de underliggende bytene. Ikke bruk file.text() for et bilde, et arkiv eller en kryptert fil: ugyldige tegnsekvenser kan bli erstatningstegn. Hvis destinasjonen trenger en Data URI, FileReader.readAsDataURL() gir innpakningen så vel som Base64 data.
// file is a File selected by the user.
const bytes = new Uint8Array(await file.arrayBuffer());
console.log(bytes.byteLength); // original file size in bytes
// Pass bytes to a byte-oriented encoder, not TextEncoder.
Rundturssjekker som fanger opp reelle feil
Sammenlign dekodede byte med den opprinnelige byte-matrisen. Sammenligning av skjermbilder eller filnavn kan ikke oppdage en endret byte. Inkluder tom input, alle byteverdier fra 0 til 255, kinesisk tekst, emoji og en nyttelast hvis lengde etterlater én eller to byte i den siste gruppen. For en gruppe filer, bevar hver fils navn, størrelse og resultat uavhengig slik at en feil ikke kan overskrive en annen vellykket utgang.
Hold konverteringer lokale med mindre arbeidsflyten med vilje kaller en API. En nettverksforespørsel som inneholder den kodede utgangen sender fortsatt de underliggende dataene i reversibel form. For byte-strengoppførsel og Unicode-begrensning for nettleserfunksjonen, se MDN: btoa().