Benötigt das Speichern von Nur-Text-Daten weniger Platz als das Speichern der entsprechenden Nachricht in Binärform?

32

Als Webentwickler verstehe ich Binärdaten kaum.

Wenn ich den Satz nehmen „Hallo Welt.“, Wandeln es in binär, und speichern Sie es als binäre in einer SQL - Datenbank, es scheint wie die 1 und 0 würde mehr Platz als die Buchstaben in Anspruch nehmen. Es scheint mir, als ob die Verwendung von Buchstaben einer Komprimierung gleicht, bei der ein Symbol für mehrere steht.

Aber funktioniert das wirklich so?

Benötigt das Speichern von Nur-Text-Daten weniger Platz als das Speichern der entsprechenden Nachricht in Binärform?

John Doe
quelle
126
Sie kennen nicht das absolute Minimum, das jeder Entwickler über die Zeichenkodierung wissen muss . Zum Glück hat Ihnen der Gründer dieser Seite einen Artikel geschrieben. Lesen Sie es, bevor Sie erneut programmieren. joelonsoftware.com/2003/10/08/…
Eric Lippert
16
@EricLippert Eine tolle Lektüre und ich bin als Ergebnis besser dran, danke.
John Doe
4
Ich empfehle auch utf8everywhere.org
Basile Starynkevitch
2
Ein Webentwickler zu sein, ist keine Entschuldigung dafür, nicht zu wissen, wie Zeichenkodierung und Binärdaten funktionieren. Sie müssen wirklich Ihre Fähigkeiten
auffrischen

Antworten:

134

Klartext ist binär.

Wenn Sie eine Hauf eine Festplatte schreiben, schneidet der Schreibkopf nicht zwei vertikale Linien und eine horizontale Linie in den Plattenteller, sondern codiert die Bits 010010001 magnetisch in den Plattenteller.

Daher sollte es offensichtlich sein, dass das Speichern von Nur-Text-Daten genau so viel Platz beansprucht wie das Speichern von Binärdaten.

Klartext ist jedoch nur ein 2 bestimmtes Binärformat

Klartext kann reversibel in andere Binärformate umgewandelt werden. Eine übliche Transformation ist die Komprimierung, die normalerweise zu einer kompakteren Darstellung führt, dh weniger Bits, die zur Darstellung derselben Informationen verwendet werden.

Je nachdem, was Sie mit dem Klartext darstellen, können Sie möglicherweise verschiedene Binärformate verwenden, um die gleichen Informationen darzustellen. Dies kann mehr Platz verbrauchen, es kann weniger verbrauchen.

Zum Beispiel könnten die Zahlen 5und 1234567im Klartext mit Ziffern dargestellt werden, was zu den folgenden Bitsequenzen auf Platte 3 führt :

00110101 00000000
00110001 00110010 00110011 00110100 00110101 00110110 00110111 00000000

Alternativ können Sie das 32-Bit -Zweierkomplement verwenden :

00000000 00000000 00000000 00000101
00000000 00010010 11010110 10000111

Welches ist eine weniger kompakte Darstellung von 5, aber kompakter Darstellung von 1234567.

Und es gibt buchstäblich unendlich viele andere Darstellungen, die ein unterschiedliches Maß an Kompaktheit und Flexibilität aufweisen würden, obwohl in der Praxis weitaus weniger Darstellungen tatsächlich verwendet werden.


1 Angenommen, UTF-8. Die genaue Reihenfolge der Bits für ein Zeichen hängt von der verwendeten Codierung ab.

2 Oder eigentlich mehrere Formate, wenn man die verschiedenen Codierungen berücksichtigt .

3 Wenn Sie sich fragen, was diese acht Nullen an den Enden sind, müssen Sie wissen, wie lang die Daten sind. Die Optionen beschränken sich im Grunde genommen auf einen Marker (ich habe dies über ein Null-Byte verwendet), einen Speicherplatz zum Speichern der Länge (Pascal hat ein Byte zum Speichern der Länge eines Strings verwendet) oder eine feste Größe (im Komplement der folgenden beiden verwendet) Beispiel).

8bittree
quelle
6
Ein kleiner Unterschied ist die Darstellung des Zeilenendes, das unter Unix / Binär ein Byte (LF) und unter Windows / Text zwei Byte (CR-LF) benötigt.
Glenn Randers-Pehrson
97
+1 für "Der Schreibkopf schneidet nicht zwei vertikale Linien und eine horizontale Linie in die Platte .
Tulains Córdova
@BaardKopperud Du hast recht! ;)
Tulains Córdova
2
@BaardKopperud Es gibt / gab LightScribe , aber das war nicht wirklich für das Lesen am Computer gedacht, obwohl Google Goggles vielleicht einige LightScribe-Labels lesen konnte. Aber das auf der eigentlichen Datenspeicherseite zu tun, wäre ziemlich interessant. Erinnert mich an Songs mit ausgefallenen Grafiken, die über ein Oszilloskop abgespielt werden .
8bittree
2
@ TulainsCórdova Obwohl Turing-Maschinen eigentlich mit einem beliebigen Alphabet arbeiten, könnten sie theoretisch Buchstaben auf das Band schreiben. Zufällig haben wir uns für ein Alphabet mit zwei Symbolen entschieden.
Gardenhead
15

Ich finde es sehr lustig, darüber nachzudenken. Binär ist nicht 1s und 0s in der Art, wie Sie darüber sprechen.

Stellen Sie sich vor, es gibt eine Menge. Ich kann Ihnen auf viele verschiedene Arten sagen, um welche Menge es sich handelt:

  • Nine auf Englisch
  • Neuf auf Französisch
  • 9 in arabischen Ziffern
  • IX in römischen Ziffern
  • 1001 in Binär mit arabischen Ziffern
  • on off off on in Binär mit ein / aus
  • high low low high in Binär dargestellt mit Spannungen oder Hebeln oder Wasserständen oder elektrischer Ladung ... oder englischen Wörtern 'hoch' und 'niedrig'

Sie alle repräsentieren dasselbe. Der Punkt hier ist, dass binär nicht 1s und 0s ist, das ist nur eine Möglichkeit, einen Wert darzustellen.

Wenn Sie von der Umwandlung eines H in ein Binärbit sprechen, stellen Sie sich wahrscheinlich vor, Sie würden 10101010 auf dem Bildschirm sehen - aber das ist nicht "binär", das ist eine Ziffer für jedes Binärbit.

Ja, wenn Sie Hzu "binär" konvertieren , wie die Leute normalerweise darüber sprechen, und dies dann in arabischen Ziffern darstellen und dann speichern, wird mehr Speicherplatz in Anspruch genommen als bei der Konvertierung Hin aitch.

Aber Sie können sehen, dass Binär eine Möglichkeit ist, eine Größe darzustellen, und zwar anhand der Logik, die besagt: "Wenn ich H in Binär umwandle und es so darstelle high low high low high low high low, würde es 35 Zeichen dauern! Das ist sogar mehr als 10101010! Aber diese beiden sind 'Binär' .. also wie ist einer größer als der andere?

Die andere Seite dieser ist zu fragen , wie die Hvon einem Computer gespeichert ist, und zu sehen , dass Hselbst nur ein Weg , um eine Menge zu repräsentieren - die gleichen Menge 72, 01001000oder seventy twooder ASCII - Zeichencode H. Welche ist die Antwort von 8bittree , dass Klartext ist binär, aber das ist mir , was das zeigen versuchen , Mittel .

Sie erhalten also ein kleines Muster in einem Computer 01001000und was bedeutet das? Alles, was als Zahl, als Teil einer Zip-Datei oder als Charakter bezeichnet werden kann, hängt von der Absicht der Person ab, die es erstellt hat. Wenn Sie wissen, dass es sich um reinen Text handeln soll, stammt er aus einer Zeichenkodierung H-> 01001000und Sie suchen in der Zeichenkodierungstabelle nach dem richtigen Zeichensatz (ASCII, UTF-8, Shift-JIS usw.) Charakter und heraus kommt ein Hoder was auch immer. Oder es kommt das falsche Zeichen heraus, wenn Sie eine andere Codierungssuche verwenden als die Person, die es erstellt hat. Dies ist der Link von @Eric Lippert.

Aber wenn ich das schreibe und Sie darüber nachdenken, Hist es ein Byte und 01001000es sind 8 Byte, ja, das ist mehr Platz. Und ja, es ist (eine Darstellung von) binär. Aber es ist auf einer höheren Abstraktionsebene als der Computer - binär dargestellt in ASCII-Zeichen, wobei jedes Zeichen hinter den Kulissen mit einem binären Bitmuster dargestellt wird, das so groß ist wie das HEinzelne.

TessellatingHeckler
quelle
12

Benötigt das Speichern von Nur-Text-Daten weniger Platz als das Speichern der entsprechenden Nachricht in Binärform?

Nein niemals.

Ihr Computer speichert die Klartextdaten bereits in der entsprechenden Binärdarstellung. Wenn Sie etwas im Klartext- oder Binärformat speichern, wird lediglich angegeben, wie der Computer diesen identischen Binärdatenstrom interpretieren soll .

Es scheint mir, als ob die Verwendung von Buchstaben einer Komprimierung gleicht, bei der ein Symbol für mehrere steht.

Das ist irgendwie wahr. Ein Zeichen steht für mehr als ein Bit. Das Problem ist, dass es sich um unterschiedlich große Dinge handelt. Zum Speichern einer 1 oder einer 0 ist nur ein Bit erforderlich, zum Speichern eines Klartextzeichens jedoch 8 Bits (oder mehr). Sie erhalten nichts durch die Verwendung von Zeichen.

Wenn überhaupt , können Sie die Dinge auf die andere Weise komprimieren. Immerhin sind 8 Bit 256 verschiedene mögliche Werte, doch ist Klartext normalerweise auf Buchstaben, Zahlen und einige Satzzeichen beschränkt. Es braucht nicht so viele Bits, wie es braucht.

Telastyn
quelle
3
Naja, vielleicht manchmal :-) Zwei mögliche Fälle, die ich mir vorstellen kann. 1) Sie haben eine kurze Textzeichenfolge, die Sie komprimieren. Die komprimierte Datei enthält einige Metadaten, wodurch die komprimierte Datei größer als die ursprüngliche Zeichenfolge ist. 2) Sie haben einige Gleitkommawerte, zB 1.2. Das Speichern als Text würde 3 Bytes (4 mit einem Abschlusszeichen) betragen, während das Speichern eines binären Double 8 Bytes dauern würde.
Jamesqf
5
Die Antwort hängt wirklich davon ab, was Sie mit "binär" meinen. Zum Beispiel nimmt UTF-32 viermal so viel Platz ein wie ASCII. Wenn Sie also mit "Nur-Text" ASCII und mit "Binär" UTF-32 meinen, würde Nur-Text weniger Platz beanspruchen als mit Binär. Sie können jedoch die Definitionen umkehren und das gegenteilige Ergebnis erzielen.
David Conrad
1
@DavidConrad Naja, das kommt nur auf den Punkt "Es gibt keinen einfachen Text". Das nächste, was Sie haben, ist eine Binärdatei ohne Metadaten / Header, die den Typ identifizieren und raten, dass "Text als XXX codiert sein muss!". Es gab eine Zeit, in der "Nur-Text-Datei" in einem begrenzten Kontext etwas Vernünftiges bedeutete, aber es ist nicht mehr so ​​richtig. Das Beste, was Sie bekommen können, ist, dass "alle Daten in der Datei als Text codiert sind" im Gegensatz zu "einige / alle Teile der Daten sind nicht als Text codiert".
Luaan