So kodieren Sie UTF-8-Text in Base64
- Tippen oder fügen Sie Ihren Text in Eingabe · Text ein. Zeichensatz steht bereits auf UTF-8.
- Das Base64 erscheint in Ausgabe · Base64. Die Angabe Eingabe unter dem Tool ist die Anzahl der UTF-8-Bytes; der Zähler über dem Feld zählt Zeichen so wie JavaScript, ein Emoji zählt also als 2.
- Aktivieren Sie URL-sicher (- _) und Ohne Padding (=) für URLs und Tokens, oder wählen Sie einen Zeilenumbruch für E-Mail oder PEM.
- Kopieren Sie die Ausgabe oder laden Sie sie als
base64.txtherunter.
Base64 in UTF-8 macht aus dem Ergebnis wieder Text.
Wie UTF-8 Zeichen in Bytes verwandelt
UTF-8 verwendet 1 bis 4 Bytes pro Codepoint. ASCII bleibt bei 1 Byte, deshalb wird englischer Text in UTF-8 und ASCII gleich kodiert. Alles andere braucht mehr:
| Zeichen | Codepoint | UTF-8-Bytes | Base64 |
|---|---|---|---|
A | U+0041 | 41 | QQ== |
é | U+00E9 | C3 A9 | w6k= |
€ | U+20AC | E2 82 AC | 4oKs |
日本語 | U+65E5 U+672C U+8A9E | 9 Bytes, je 3 | 5pel5pys6Kqe |
😀 | U+1F600 | F0 9F 98 80 | 8J+YgA== |
Da Base64 auf die Bytes noch ein Drittel aufschlägt, wächst ein chinesischer oder japanischer Satz von Zeichen zu Base64-Zeichen ungefähr auf das Vierfache, und ein einzelnes Emoji wird zu 8 Zeichen. Denken Sie daran bei Feldern mit Längenlimit; der Größenrechner hilft dabei.
Emoji-Sequenzen und Hauttöne
Was wie ein Emoji aussieht, sind oft mehrere zusammengeklebte Codepoints. Ein Hautton ist ein eigener Modifikator, und Familien- oder Berufs-Emoji verbinden mehrere Personen mit einem unsichtbaren Zero-Width Joiner (U+200D):
| Emoji | Codepoints | UTF-8-Bytes | Base64 |
|---|---|---|---|
| 😀 | 1 | 4 | 8J+YgA== |
| 👍🏽 | 2 (Daumen hoch + mittlerer Hautton) | 8 | 8J+RjfCfj70= |
| 👨👩👧 | 5 (drei Personen + zwei Joiner) | 18 | 8J+RqOKAjfCfkanigI3wn5Gn |
Wird ein Base64-String oder werden seine dekodierten Bytes mitten in einer solchen Sequenz abgeschnitten, bleiben kaputte Zeichen zurück. Kürzen Sie kodiertes UTF-8 deshalb nie an einem beliebigen Byte.
Gleicher Text, andere Bytes: Unicode-Normalisierung
Manche Zeichen haben in Unicode zwei gültige Schreibweisen. é kann der einzelne Codepoint U+00E9 sein (zusammengesetzt, NFC) oder e gefolgt von U+0301 COMBINING ACUTE ACCENT (zerlegt, NFD). Beide sehen gleich aus, die Bytes unterscheiden sich aber:
| Text | Form | Bytes | Base64 |
|---|---|---|---|
é | NFC | C3 A9 | w6k= |
é | NFD | 65 CC 81 | ZcyB |
naïve | NFC | 6 | bmHDr3Zl |
naïve | NFD | 7 | bmFpzIh2ZQ== |
Dateinamen im älteren Apple-Dateisystem HFS+ werden zerlegt gespeichert, während die meisten Tastaturen zusammengesetzten Text erzeugen. Wenn Sie Base64-Werte vergleichen, signieren oder als Schlüssel verwenden, normalisieren Sie zuerst. Dieses Tool kodiert genau die Codepoints, die Sie einfügen, und normalisiert nicht.
UTF-8 in Base64 im Code
In JavaScript erzeugt TextEncoder immer UTF-8. Normalisieren Sie zuerst, wenn die Eingabe aus unterschiedlichen Quellen stammen kann:
const text = "e\u0301".normalize("NFC");
Buffer.from(text, "utf8").toString("base64"); // "w6k=" (Node.js)
new TextEncoder().encode(text); // Uint8Array [195, 169]
Im Browser können die Bytes aus TextEncoder an bytes.toBase64() gehen, wo das unterstützt wird (Uint8Array.toBase64), oder durch den btoa-Helfer auf der JavaScript-Seite.
import base64, unicodedata
s = unicodedata.normalize("NFC", "nai\u0308ve")
base64.b64encode(s.encode("utf-8")).decode() # 'bmHDr3Zl'
Für Dateien und Streaming siehe Base64 in Python.
Häufige Fragen
Ist Base64 von UTF-8 dasselbe wie normales Base64?
Ja. Base64 kodiert immer Bytes; „UTF-8 in Base64“ sagt nur, welche Bytes. Bei reinem ASCII-Text sind die UTF-8-Bytes gleich den ASCII-Bytes, die Ausgabe ist also in beiden Fällen identisch.
Warum ergeben zwei gleich aussehende Strings unterschiedliches Base64?
Unicode kann manche Zeichen auf mehr als eine Weise schreiben. é als ein Codepoint ist w6k=, e plus kombinierender Akzent dagegen ZcyB. Normalisieren Sie vor dem Kodieren auf NFC, wenn die Werte übereinstimmen müssen.
Fügt der Encoder eine UTF-8-Byte-Order-Mark hinzu?
Nein. Die Ausgabe beginnt direkt mit den Bytes Ihres Texts. Besteht ein Empfänger auf einer BOM, muss das Base64 mit 77u/ beginnen, der Kodierung der Bytes EF BB BF.
Wie viele Bytes belegt ein Emoji?
Ein einzelner Emoji-Codepoint belegt in UTF-8 4 Bytes. Emoji mit Hautton oder zusammengesetzte Familien bestehen aus mehreren Codepoints: 👍🏽 hat 8 Bytes und die Familie 👨👩👧 18.