Base64, Hex, Prozentkodierung und Base85: Auswahl nach Transport

Vergleichen Sie Byte-Overhead, Escape und Interoperabilität, ohne Textkodierung mit numerischer Basiskonvertierung zu verwechseln.

Eine Kodierung ist nur dann sinnvoll, wenn sich beide Seiten darüber einig sind. Die kleinste Darstellung ist nicht unbedingt die beste Wahl, wenn der Empfänger ein vertrautes Alphabet benötigt, die Nutzlast von einer Person eingegeben werden muss oder die umgebende Syntax bestimmte Zeichen besonders behandelt. Beginnen Sie mit dem Empfangsprotokoll.

Hex ist ausführlich, aber leicht zu überprüfen

Hexadezimal schreibt jedes Byte als zwei Ziffern. Die Bytefolge FF 00 41 wird ff0041. Jedes Paar verfügt über eine sichtbare Bytegrenze, die bei der Überprüfung von Dateisignaturen, Prüfsummen und Protokollpaketen hilfreich ist. Es verdoppelt die Zeichenanzahl, aber sein kleines Alphabet passt normalerweise problemlos in Protokolle und Debugging-Tools.

Base64 bringt Größe und Interoperabilität in Einklang

Base64 repräsentiert drei Bytes mit vier Zeichen. Es ist eine übliche Lösung für Binärfelder in textbasierten Formaten. Standard Base64 enthält Plus und Schrägstrich; Base64URL ersetzt diese Zeichen, wenn ein Protokoll ein anderes Alphabet benötigt. Auffüll- und Leerzeichenregeln müssen noch vereinbart werden. Keine der beiden Formen teilt dem Empfänger mit, ob es sich bei den dekodierten Bytes um Text, ein Bild oder komprimierten Inhalt handelt.

Die prozentuale Kodierung gehört zu den URL-Komponenten

Prozentuale Codierung schreibt ein Escape-Byte als %HH. Es ist nicht einfach ein Massenersatz für Base64. Die Komponente bestimmt, welche Zeichen maskiert werden müssen, und der Text sollte zunächst als UTF-8 codiert werden. Ein Schrägstrich kann Pfadsegmente trennen, während ein Fragezeichen eine Abfrage startet; Die Behandlung des gesamten URL als eine undurchsichtige Komponente ändert seine Bedeutung.

console.log(encodeURIComponent('a+b / 中文'));
// a%2Bb%20%2F%20%E4%B8%AD%E6%96%87

Base85 benötigt eine genaue Variante

Viele Base85-Schemata stellen vier Bytes mit fünf Zeichen dar, ihre Alphabete, Trennzeichen und Sonderfälle unterscheiden sich jedoch. Es kann nicht davon ausgegangen werden, dass ASCII85 und Z85 austauschbar sind. Z85 stellt auch Anforderungen an die Blockgröße. Ein Alphabet mit hoher Dichte kann Satzzeichen enthalten, die im umgebenden Format erneut maskiert werden müssen, was den offensichtlichen Nutzen verringert.

Verwechseln Sie diese Bytekodierungen nicht mit der Konvertierung der Ganzzahl 255 zwischen Zahlenbasen. Eine Datei kann mit null Bytes beginnen, während bei einer Ganzzahldarstellung diese führenden Nullen möglicherweise weggelassen werden. Ein reversibler Dateicodec muss definieren, wie Länge und führende Nullen beibehalten werden.

Verwenden Sie Hex für die Byte-Inspektion, die angegebene Variante Base64 für den interoperablen Binärtransport, die Komponentenkodierung URL für URLs und ein spezielles Schema nur, wenn beide Parteien denselben Vertrag implementieren. Vergleichen Sie die End-to-End-Größe nach Escape und Komprimierung. RFC 4648 definiert die Standardfamilien Base16, Base32 und Base64, einschließlich ihrer unterschiedlichen Alphabete.