Warum wird beim Öffnen einer Binärdatei mit dem Texteditor kein Binärcode angezeigt?

51

Warum wird beim Öffnen einer Binärdatei mit dem Texteditor kein Binärcode angezeigt? Wenn ich zum Beispiel ein Bild mit einem Texteditor öffne, sehe ich einige seltsame Zeichen und auch einige für Menschen lesbare Zeichen. Das Bild sollte jedoch binär codiert sein.

Templer
quelle
8
Was hast du erwartet? Wie sollte dies Ihrer Meinung nach archiviert werden?
Nikodemus RIP
2
Ich frage mich, warum mehr Editoren der Binärdatei keine rohen ASCII-1/0-Sequenzen anbieten.
Xeoncross
7
@Xenocross: Da die unformatierte 0/1-Sequenz unbrauchbar ist, ist sie für die manuelle Dekodierung zu unhandlich, da sie sehr viel Platz auf dem Bildschirm beansprucht. Hex-Anzeige ist im Allgemeinen besser für die manuelle Decodierung. Und mit einigem Training können Sie Hexadezimalzahlen schnell und einfach in Binärzahlen und umgekehrt übersetzen.
Lie Ryan
3
@Fiasco Labs: Pedanterie: eine hex Zahl mit zwei Ziffern - 00 bis FF, die 0 bis decimal übersetzt - 255 (8 Bits , die 2 ^ 8 = 256 mögliche Zustände).
Piskvor
1
@Piskvor - Danke, dass du es besser ausgedrückt hast als ich. Deadbeef ist eine 8-stellige Hex-Zahl für den Datensatz. ; ^)
Fiasco Labs

Antworten:

83

Binär- und Textdaten werden nicht getrennt: Es handelt sich lediglich um Daten . Es kommt auf die Interpretation an, die sie zum einen oder anderen macht. Wenn Sie Binärdaten (z. B. eine Bilddatei) in einem Texteditor öffnen, ist vieles davon nicht sinnvoll, da es nicht zu der von Ihnen gewählten Interpretation (als Text) passt .

Was Sie als Text bezeichnen, ist eine Teilmenge des möglichen Dateiinhalts: Daten, die in einem bestimmten Zeichensatz in lesbare Zeichen umgewandelt werden.

In ASCII sehen Sie beispielsweise, dass von 128 "erlaubten" Werten nur etwa die Hälfte Buchstaben und Zahlen sind, 30 Satzzeichen und der Rest Steuerzeichen . Die letztere Gruppe wird in Textdateien nur selten verwendet, und sie haben keine wirklich gute Textdarstellung. Einige von ihnen sind Tabulatoren und Zeilenumbrüche , bei denen Texteditoren bereits kreativ werden müssen, um sie anzuzeigen.

Einige Texteditoren verfügen über Optionen zum expliziten Anzeigen von Leerzeichen. Dann werden sie zusätzlich zu ihrem normalen Formatierungsverhalten (das auch nur die Interpretation dieser Zeichen ist) tatsächlich als Zeichen gezeichnet .

Pure ASCII interpretiert nur 128 Werte. Die zum Speichern dieser Informationen verwendeten Bytes haben jeweils 256 mögliche Werte, sodass die Hälfte der möglichen Werte in ASCII nicht zulässig ist. Diese werden z. B. in regionenspezifischen Zeichensätzen wie Latin 1 verwendet, in ASCII sind sie jedoch undefiniert. Sie haben keine nützliche Darstellung in einem Text-Viewer, der nur ASCII verarbeiten kann.


Binärdaten werden normalerweise nicht als Text interpretiert. In diesen Dateien sind also üblicherweise alle möglichen Bytewerte zu finden. Alles andere wäre verschwenderisch (und das ist ein Grund, warum Sie Text sehr gut komprimieren können). Bilddateiformate sind kompliziert und werden normalerweise nicht als Text angezeigt, sodass sie nicht lesbar sein müssen.

Da es keine gemeinsame Dateninterpretation (Zeichensatz) gibt, die alle möglichen Werte lesbaren Zeichen zuordnet, und da dies ohnehin keinen Sinn ergibt (da es sich um nicht lesbaren Text handelt), werden Hauptteile als Kauderwelsch angezeigt.


Ein Hex-Editor wählt eine andere Darstellung für die Daten: Er zeigt jedes Byte als zwei hexadezimale Ziffern an. Es ist nur eine andere Darstellung und eine mit einem leicht lesbaren Zeichensatz: Alle 256 möglichen Bytewerte können als zwei hexadezimale Ziffern dargestellt werden.

Da es eine einfache Zuordnung von Binärdaten zu Hex und umgekehrt gibt (4 Binärziffern zu / von einer Hexadezimalziffer) und Binärdaten nur sehr wenige Informationen pro Ziffer enthalten, ist Hexadezimal für Menschen im Allgemeinen die bevorzugte Methode, Binärdaten zu lesen, sofern es keine spezifischen gibt Gründe, eine andere Darstellung zu bevorzugen.


Einige Texteditoren haben möglicherweise einen Hex-Editor-Modus und eine Heuristik, die versucht, festzustellen, ob es sich bei einer Datei um Text oder um eine Binärdatei handelt, und wählen automatisch den einen oder den anderen Modus aus. Es kann jedoch schwierig sein, dies zu korrigieren, und es ist keine spezifische Eigenschaft der Datei, die angibt, ob es sich um die eine oder die andere Art handelt.


Einige FTP-Clients fordern Sie auf, anzugeben, welche Dateiendungen für Textdaten verwendet werden . Diese Programme ändern dann den Dateiinhalt entsprechend dem Betriebssystem des Computers, mit dem Sie verbunden sind, da Windows eine andere Zeilenendezeichenfolge ( CR/LF) verwendet als Linux und Unix (einschließlich Mac OS X; LF).

Daniel Beck
quelle
4
Ughh, die LF hat mich öfter gebissen, als ich mir merken möchte.
Surfasb
32

Denn Sie haben es in einem geöffneten Text - Editor, kein binäres Editor .

Ignacio Vazquez-Abrams
quelle
22
Wie Sie gesehen haben, Text.
Ignacio Vazquez-Abrams
1
Text als Darstellung von Hexadezimalzahlen (0-f), die paarweise (Bytes) angeordnet sind. Wenn Sie binär wollen, konvertieren Sie das Hex in binär in eine sinnlose Folge von Nullen und Einsen. Hex ist besser lesbar und leichter zu verstehen.
Fiasco Labs
2
Ich muss Folgendes sagen: Jemand sollte den mutigen Schritt wagen, einen echten Binäreditor mit Ones und Zeros zu erstellen (und dann möglicherweise Bereiche mit verwandten Hex / Char / Dec-Translitterationen zu trennen), um diese Art von Dingen zu lehren. Ich weiß, dass sie das nicht sollten, aber die populären Medien und Mathematiklehrer, die vortäuschen, Computer zu kennen, haben alle Erwartungen für eifrige Kinder, die lernen wollen, falsch gestellt.
ZJR
@ ZJR: Kein Grund, warum sie nicht sollten. In vielen Hex-Editoren können Sie Dateiinhalte in Binärform anzeigen. Programmierer finden es im Allgemeinen nicht so nützlich wie die hexadezimale Ansicht, daher hört man nicht so viel darüber.
David Z
16

Es hat alles mit Kontext und Interpretation zu tun. Was sich in Ihrem Computer befindet, sind Muster von Hoch- und Niederspannung oder magnetisierte Bereiche einer Platte, die nur dann an Bedeutung gewinnen, wenn wir entscheiden, wie wir sie interpretieren möchten.

Unter anderen Umständen könnte das Muster niedrig-hoch-niedrig-niedrig-niedrig-niedrig-niedrig-hoch die Zahl 65 bedeuten, ein Großbuchstabe 'A', eine himmelblaue Farbe, die ein Kunde am Tag 'März' bestellt hat 6. "oder irgendetwas überhaupt, wirklich.

Wenn Sie Ihre Bilddatei in einem Grafikprogramm öffnen, kann sie als Bild interpretiert werden. Sie weiß, welche Muster das Bildformat angeben, welche Muster die Bildgröße usw.

Wenn Sie Ihre Bilddatei in einem Texteditor öffnen, wird sie als Text behandelt. Dies ist ein sehr einfaches Format, das dem, was im Computer wirklich vor sich geht, sehr viel näher kommt, aber es gibt noch einige Interpretationen. Insbesondere wird fast jedes Muster als ein bestimmtes Zeichen interpretiert, einige normale wie AZ, aber auch einige komische Zeichen. Einige Muster werden nicht als Zeichen angezeigt, sondern als grundlegende Formatierung behandelt: Zeilenvorschub, Tabulator.

(Die Situation wird durch Dinge wie Unicode und Textcodierungen wie UTF-8 etwas kompliziert, aber der Einfachheit halber werde ich hier nicht darauf eingehen.)

Wenn Sie eine Binärdatei in einem Texteditor geöffnet haben, achten Sie darauf, keine Änderungen vorzunehmen, da fast jede Änderung die normale Interpretation des Dateiinhalts vollständig stört, dh die Datei wird zerstört und unbrauchbar.

Andrew Turner
quelle
3

Betrachten Sie als vereinfachtes Beispiel eine Bilddatei, die mit einem Texteditor geöffnet wurde.

Das Bild ist ein einfaches Schachmuster mit 3 Pixel breiten Quadraten und einem 1 Pixel grauen Rand zwischen den Quadraten. - Wiederholen Sie drei schwarze Pixel, ein graues Randpixel, drei weiße Pixel, ein graues Randpixel.

Die erste Zeile in diesem Bild hätte viermal den folgenden Wert:

Black    Black    Black    Gray     White    White    White    Gray
0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F

(In Hex anstelle von Binary - die Zeichenfolge in Binary wäre viermal so lang - 0x7F wird durch 0b01111111 ersetzt.)

Wenn Sie diese Datenzeichenfolge in einen Texteditor laden, erhalten Sie den folgenden Text:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Entf] [Entf] [Entf] [Leer] [Leer] [Leer] [Leer ] [Leer] [Leer] [Leer] [Leer] [Entf] [Entf] [Entf]

Dies liegt daran, dass 0x00 der ASCII-Code für den Null-Wert ist und Sie diesen dreimal schreiben müssen, um den Wert für ein schwarzes Pixel (auf jeden Fall in 24-Bit-BMP) zu erhalten, und dass Sie drei schwarze Pixel haben. Dann ist 0x7F der ASCII-Code für Delete, und Sie benötigen DAS dreimal, um ein graues Pixel zu erhalten. 0xFF ist für nichts Besonderes ein gültiger ASCII-Code - selbst im erweiterten ASCII-Satz - und Sie müssen ihn neunmal schreiben, um 3 weiße Pixel zu erhalten. Wenn Sie den Vorgang beenden, erhalten Sie drei weitere Löschvorgänge, um ein graues Pixel zu schreiben.

Eine andere Möglichkeit, dies zu zeigen, ist das umgekehrte Beispiel: Was müssen Sie in eine Datei schreiben, um beim Öffnen in einem Texteditor Nullen und Einsen zu erhalten?

Die ASCII-Codes für Null und Eins natürlich! Eine Null in einem Texteditor wird nicht als einzelnes Bit mit dem Wert 0 gespeichert, sondern als 8 Bits mit dem Wert 0b00110000 oder in hexadezimaler Schreibweise 0x30

Der ASCII-Code für '0' ist 0x30 und der ASCII-Code für '1' ist 0x31. Wenn Sie also ein Schachmuster als Nullen und Einsen speichern möchten, sieht Ihre Datei folgendermaßen aus:

text editor:
10101010
01010101
10101010
01010101

Stored data (ASCII values for '1', '0' and 'new line'):
0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D  0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31

Es steckt noch viel mehr dahinter - Dateien haben Starts und Stopps, Metadaten und alle anderen Arten von Dingen, aber die Lektion zum Mitnehmen und die Antwort auf Ihre Frage lautet:

Sofern die ersten 8 Bits Ihrer Datei nicht 0b00110000 sind, schreibt Ihr Texteditor keine '0', da dies der ASCII-Code für das Zeichen '0' ist. Sofern die ersten 8 Bits Ihrer Datei nicht 0b00110001 sind, schreibt Ihr Texteditor nicht '1', da dies der ASCII-Code für das Zeichen '1' ist.

medivh
quelle
0

Der Editor ist nicht schlau genug, um herauszufinden, ob ein Text sinnvoll ist oder nicht, und zeigt Dateien als Text an, sofern nicht ausdrücklich anders angegeben, sofern diese Funktion vorhanden ist. Wie andere betonten, haben einige Editoren die Funktion, hexadezimal anzuzeigen.

Emilio M Bumachar
quelle
UltraEdit ist intelligent genug - es wechselt für solche Dateien in den Hex-Bearbeitungsmodus.
Peter Mortensen