Warum wird nur base64 anstelle von base128 verwendet, um Binärdaten im Web zu übertragen? Der ASCII-Zeichensatz enthält 128 Zeichen, die theoretisch die Basis 128 darstellen könnten, in den meisten Fällen wird jedoch nur base64, nicht jedoch base128 verwendet.
encoding
language-agnostic
binary
gmadar
quelle
quelle
Antworten:
Das Problem ist, dass mindestens 32 Zeichen des ASCII-Zeichensatzes "Steuerzeichen" sind, die vom empfangenden Terminal interpretiert werden können. Zum Beispiel gibt es das BEL-Zeichen (Glocke), das das empfangende Terminal läutet. Es gibt die Zeichen SOT (Start Of Transmission) und EOT (End Of Transmission), die genau das ausführen, was ihre Namen implizieren. Und vergessen Sie nicht die Zeichen CR und LF, die möglicherweise eine besondere Bedeutung dafür haben, wie Datenstrukturen zu einem Stream serialisiert / abgeflacht werden.
Adobe hat die Base85-Codierung erstellt , um mehr Zeichen im ASCII-Zeichensatz zu verwenden. AFAIK ist jedoch durch Patente geschützt.
quelle
btoa
, die aus dem Jahr 1990 stammen, und diese wären sicherlich sowieso abgelaufen.Weil einige dieser 128 Zeichen nicht druckbar sind (hauptsächlich solche, die unter dem Codepunkt 0x20 liegen). Daher können sie nicht zuverlässig als String über den Draht übertragen werden. Wenn Sie den Codepunkt 128 überschreiten, können Codierungsprobleme auftreten, da systemübergreifend unterschiedliche Codierungen verwendet werden.
quelle
Wie bereits in den anderen Antworten erwähnt, besteht der entscheidende Punkt darin, den Zeichensatz auf die druckbaren zu reduzieren . Ein effizienteres Codierungsschema ist basE91, da es einen größeren Zeichensatz verwendet und dennoch Steuer- / Leerzeichen im niedrigen ASCII-Bereich vermeidet. Die Webseite enthält einen schönen Vergleich der Codierungseffizienz von Binär- und Base64- und BasE91- Codierung.
Ich habe einmal die Java-Implementierung aufgeräumt. Wenn Leute interessiert sind, könnte ich es auf GitHub pushen.
Update : Es ist jetzt auf GitHub .
quelle
Dass die ersten 32 Zeichen Steuerzeichen sind, hat absolut keine Relevanz, da Sie sie nicht verwenden müssen, um 128 Zeichen zu erhalten. Wir haben 256 Zeichen zur Auswahl, und nur die ersten 32 sind Steuerzeichen. Damit bleiben 192 Zeichen übrig, und daher sind 128 ohne Verwendung von Steuerzeichen vollständig möglich.
Hier ist der Grund: Es muss etwas sein, das gleich aussieht und das Sie kopieren und einfügen können, egal wo. Daher müssen es Zeichen sein, die in jedem Forum, Chat, E-Mail usw. gleich angezeigt werden. Das bedeutet, dass wir keine Zeichen verwenden können, die ein Forum / Chat / E-Mail-Client normalerweise zum Formatieren oder Ignorieren verwendet. Es müssen auch Zeichen sein, die unabhängig von Schriftart, Sprache und regionalen Einstellungen gleich sind.
Das ist der Grund!
quelle
Base64 ist üblich, weil es eine Vielzahl von Problemen löst (funktioniert fast überall, wo Sie sich vorstellen können)
Sie müssen sich keine Sorgen machen, ob der Transport 8-Bit sauber ist oder nicht.
Alle Zeichen in der Codierung sind druckbar. Sie können sehen sie. Sie können sie kopieren und einfügen . Sie können sie in URLs (bestimmten Varianten) verwenden. etc.
Feste Codierungsgröße. Sie wissen, dass
m
Bytes immer inn
Bytes codieren können .Jeder hat davon gehört - es wird weitgehend unterstützt, es gibt viele Bibliotheken, die so einfach zu bedienen sind.
Base128 bietet nicht alle diese Vorteile.
Es sieht so aus, als wäre es 8-Bit sauber - aber denken Sie daran, dass base64 65 Symbole verwendet. Ohne einen Out-of-Band-Charakter können Sie nicht die Vorteile einer festen Codierungsgröße nutzen. Wenn Sie einen Out-of-Band-Charakter verwenden, können Sie nicht mehr 8-Bit-sauber sein.
Es ist jedoch nicht alles negativ.
base128 ist einfacher zu codieren / decodieren als base64 - Sie verwenden nur Verschiebungen und Masken. Kann für eingebettete Implementierungen wichtig sein
base128 nutzt den Transport etwas effizienter als base64, indem mehr der verfügbaren Bits verwendet werden.
Menschen tun Verwendung base128 - Ich verwende es jetzt für etwas. Es ist einfach nicht so häufig.
quelle
CODES
Variablen.Ich bin mir nicht sicher, aber ich denke, die niedrigeren Werte (die Steuercodes oder ähnliches darstellen) werden nicht zuverlässig als Text / Zeichen in HTTP-Anforderungen / Antworten übertragen, und die Werte über 127 sind möglicherweise Gebietsschema / Codepage / was auch immer spezifisch, daher gibt es keine 128 verschiedene Zeichen, von denen erwartet werden kann, dass sie auf allen Browsern / Plattformen funktionieren.
quelle
Esaji hat recht. Base64 wird verwendet, um Binärdaten für die Übertragung mit einem Protokoll zu codieren, das nur Text erwartet. Es ist direkt im Wiki- Eintrag.
quelle
Testen Sie die base128 PHP-Klasse. Codierung und Decodierung mit dem Zeichensatz ISO 8859-1.
GoogleCode PHP-Klasse Base128
quelle