Decodex

DECODEX · BASE64 · UTF-8

JavaScript und Unicode-Base64: btoa()-Fehler mit UTF-8 beheben

Umlaute, Koreanisch und Emojis mit TextEncoder kodieren und mit atob und TextDecoder dekodieren. Geprüfter UTF-8-Code mit Beispielen.

btoa() erwartet eine Binärzeichenfolge mit Codeeinheiten im Ein-Byte-Bereich. Es wandelt Text nicht automatisch in UTF-8 um. Koreanisch, Hindi und viele Emojis können InvalidCharacterError auslösen. Verwende explizite UTF-8-Bytes für verlässliche Ergebnisse.

Unicode kodieren und dekodieren

TextEncoder wandelt Text in Bytes um. Der folgende Code verarbeitet kleine Blöcke vor btoa und vermeidet damit zu viele Funktionsargumente bei großen Texten. Zum Wiederherstellen liefert atob Bytes, die TextDecoder als UTF-8 liest. Die Option fatal erkennt ungültige Bytes.

Den vollständigen Hin- und Rückweg prüfen

안녕하세요 😀 ergibt 7JWI64WV7ZWY7IS47JqUIPCfmIA=. Die Dekodierung muss Text, Leerzeichen und Emoji unverändert wiederherstellen. Der Beispiellink öffnet den Konverter mit festgelegten öffentlichen Daten, ohne Benutzereingaben in die URL aufzunehmen. Decodex verarbeitet lokal bis zu 5 MB UTF-8-Text.

Den fehlerhaften Schritt erkennen

Ein atob-Fehler deutet häufig auf ungültiges Base64, Padding oder Präfixe hin. Ein TextDecoder-Fehler kann Binärdaten oder eine andere Zeichenkodierung bedeuten, selbst bei gültigem Base64-Alphabet. In Node.js kodiert Buffer.from(text, "utf8").toString("base64") Text; die großzügige Dekodierung ersetzt keine Eingabevalidierung.

Beispiel ausprobieren

// Browser JavaScript: text → UTF-8 bytes → Base64.
function utf8ToBase64(text) {
  const bytes = new TextEncoder().encode(text);
  let binary = '';
  for (let i = 0; i < bytes.length; i += 8192) {
    binary += String.fromCharCode(...bytes.subarray(i, i + 8192));
  }
  return btoa(binary);
}

// Accept standard Base64 or Base64URL, with complete or omitted padding.
function base64ToUtf8(value) {
  let normalized = value.replace(/\s/g, '').replace(/-/g, '+').replace(/_/g, '/');
  if (!/^[A-Za-z0-9+/]*={0,2}$/.test(normalized) ||
      normalized.length % 4 === 1 ||
      (normalized.includes('=') && normalized.length % 4 !== 0)) {
    throw new Error('Invalid Base64 characters, length or padding');
  }
  normalized += '='.repeat((4 - normalized.length % 4) % 4);
  const binary = atob(normalized);
  const bytes = Uint8Array.from(binary, character => character.charCodeAt(0));
  return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
}

const text = '안녕하세요 😀';
const encoded = utf8ToBase64(text);
console.log(encoded); // 7JWI64WV7ZWY7IS47JqUIPCfmIA=
console.log(base64ToUtf8(encoded)); // 안녕하세요 😀

Beispiel ausprobieren →

Base64 → UTF-8 · UTF-8 → Base64

Häufige Fragen

Liefert atob direkt lesbaren Text?

Nein. Es liefert eine Binärzeichenfolge. Übertrage die Werte in Uint8Array und verwende TextDecoder("utf-8"). Bevorzuge diesen Ansatz gegenüber älteren Funktionen wie unescape().

Quellen

Weitere Base64-Anleitungen