Frage Warum benutzen Leute basel128 nicht? [geschlossen]


Warum benutzt jeder Benutzer Base 64, um Binärdaten im Internet zu übertragen? Ich frage das, weil der ASCII-Zeichensatz 128 Zeichen hat, die theoretisch die Basis 128 darstellen könnten ...


75
2018-05-15 11:18


Ursprung


Antworten:


Das Problem besteht darin, dass mindestens 32 Zeichen des ASCII-Zeichensatzes "Steuerzeichen" sind, die vom empfangenden Terminal interpretiert werden können. Z. B. gibt es das BEL (Glocken) -Zeichen, das den empfangenden Terminal zum Gong macht. Es gibt die Zeichen SOT (Beginn der Übertragung) und EOT (Ende der Übertragung), die genau das ausführen, was ihre Namen bedeuten. Und vergiss nicht die Buchstaben CR und LF, welche kann haben besondere Bedeutungen, wie Datenstrukturen in einen Stream serialisiert / abgeflacht werden.

Adobe erstellt die Base85-Codierung um mehr Zeichen im ASCII-Zeichensatz zu verwenden, aber AFAIK ist durch Patente geschützt.


88
2018-05-15 13:43



Weil einige dieser 128 Zeichen nicht druckbar sind (hauptsächlich diejenigen, die unter dem Codepunkt 0x20 liegen). Daher können sie nicht zuverlässig als eine Kette über die Leitung übertragen werden. Und wenn Sie über den Codepunkt 128 hinausgehen, können Sie aufgrund unterschiedlicher Codierungen, die systemübergreifend verwendet werden, Probleme mit der Codierung haben.


62
2018-05-15 11:23



Wie bereits in den anderen Antworten erwähnt, ist der entscheidende Punkt, den Zeichensatz auf den druckbar Einsen. Ein effizienteres Kodierungsschema ist basE91 weil es einen größeren Zeichensatz verwendet und weiterhin Kontroll- / Leerzeichen im niedrigen ASCII-Bereich vermeidet. Die Webseite enthält einen schönen Vergleich von binär und base64 vs. basE91 Kodierungseffizienz.

Ich habe einmal die Java-Implementierung aufgeräumt. Wenn Leute interessiert sind, könnte ich es auf GitHub schieben.

Aktualisieren: Es schneit auf GitHub.


14
2018-05-15 14:59



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. Das hinterlässt 192 Zeichen, und daher ist 128 ohne Steuerzeichen vollständig möglich.

Hier ist der Grund: Es muss etwas sein, das gleich aussieht, und dass Sie kopieren und einfügen können, egal wo. Dafür müssen Charaktere 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-Clients typischerweise zur Formatierung oder Nichtbeachtung verwenden. Es müssen auch Zeichen sein, die unabhängig von Schriftart, Sprache und regionalen Einstellungen gleich sind.

Das ist der Grund!


13
2017-12-19 13:07



Base64 ist üblich, weil es eine Vielzahl von Problemen löst (funktioniert fast überall, wo man es sich vorstellen kann)

  • Sie müssen sich keine Sorgen machen, ob der Transport ist 8-Bit sauber oder nicht.

  • Alle Zeichen in der Codierung sind druckbar. Sie können sehen Sie. Sie können Kopieren und Einfügen Sie. Sie können sie in URLs (bestimmte Varianten) verwenden. etc.

  • Codierungsgröße korrigiert Du weißt, dass mBytes können immer kodieren n Bytes.

  • Jeder hat davon gehört - es ist weit verbreitet, viele Bibliotheken, mit denen man so leicht zusammenarbeiten kann.

Base128 hat nicht all diese Vorteile.

Es sieht so aus, als wäre es 8-Bit sauber - aber erinnern Sie sich, dass base64 65 Symbole verwendet. Ohne Out-of-Band-Zeichen können Sie nicht die Vorteile einer festen Codierungsgröße nutzen. Wenn Sie ein Out-of-Band-Zeichen verwenden, können Sie nicht mehr 8-Bit-sauber sein.

Es ist jedoch nicht alles negativ.

  • base128 ist einfacher zu codieren / zu decodieren als base64 - Sie verwenden nur Verschiebungen und Masken. Kann für eingebettete Implementierungen wichtig sein

  • base128 verwendet den Transport etwas effizienter als base64, indem mehr verfügbare Bits verwendet werden.

Menschen machen benutze base128 - Ich benutze es jetzt für etwas. Es ist einfach nicht so üblich.


9
2017-10-13 03:45



Nicht sicher, aber ich denke, die niedrigeren Werte (die Steuercodes oder etwas repräsentieren) werden nicht zuverlässig als Text / Zeichen innerhalb von HTTP-Anfragen / Antworten übertragen, und die Werte über 127 können Gebietsschema / Codepage / was auch immer-spezifisch sein 128 verschiedene Zeichen, von denen erwartet werden kann, dass sie über alle Browser / Plattformen hinweg funktionieren.


4
2018-05-15 11:22



Esaji hat Recht. Base64 wird verwendet, um Binärdaten für die Übertragung zu codieren, die ein Protokoll verwenden, das nur Text erwartet. Es ist richtig in der Wiki Eintrag.


3
2018-05-15 11:24



Prüfe die base128 PHP-Klasse. Kodierung und Dekodierung mit ISO 8859-1 Zeichensatz.

GoogleCode PHP-Klasse Base128


2
2018-05-05 11:57