AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Datei auf Indikatoren für Binärdatei testen?
Thema durchsuchen
Ansicht
Themen-Optionen

Datei auf Indikatoren für Binärdatei testen?

Ein Thema von PeterPanino · begonnen am 9. Mai 2015 · letzter Beitrag vom 13. Mai 2015
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 15:52
Gibt es Anzeichen für BOM? Wenn ja, versuche, die nächsten paar Bytes entsprechend zu interpretieren.
Wenn nicht, kann es
a) eine Unicode-Datei ohne BOM
b) eine ASCII-Datei
c) eine Binärdatei sein

Bei (a) ist jedes zweite Byte eine 0. Vermutlich.
Bei (b) sind die Bytes=9,10,30 oder >=32 und <= 127. Meistens.

Du erstellst also eine Häufigkeitstabelle der ersten paar Zeichen (N=20 z.B.)
Bestehen die Bytes nur aus Zeichen, Ziffer, CR/LF? Dann handelt es sich vermutlich um eine Textdatei.
Haben wir fast so viele Nullen wie sonstige Bytes und sind die Bytes auch Zeichen, Ziffer CR/LF? Dann ist es vermutlich eine Unicode-Datei
Ansonsten ist die Wahrscheinlichkeit groß, das es sich um eine Binär bzw. um keine Textdatei handelt.

Aber sicher kannst Du nicht immer sein.
Ist viel zu aufwendig und unsicher. Meine bisherigen Tests haben gezeigt, dass die Prüfung auf verbotene ControlBytes und Doppel-NullBytes sehr zuverlässig ist. Bitte zeigt mir auch nur EINE Datei, wo diese Prüfung nicht funktioniert hat.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.008 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 16:08
Ist viel zu aufwendig und unsicher. Meine bisherigen Tests haben gezeigt, dass die Prüfung auf verbotene ControlBytes und Doppel-NullBytes sehr zuverlässig ist. Bitte zeigt mir auch nur EINE Datei, wo diese Prüfung nicht funktioniert hat.
Einige Beispiele sind unter https://de.wikipedia.org/wiki/Unicod...rmation_Format zu finden. UTF-32 enthält doppelte Null-Bytes, UTF-16 enthält auch "verbotene" ControlBytes:

Zitat:
00 6D|00 6B|00 3A|04 1F|04 40|04 3E|04 3C|04 35|04 3D|04 30 | UTF-16BE
m |k |: |П |р |о |м |е |н |а | mk:Промена

3E 04 00 00|3C 04 00 00|35 04 00 00|3D 04 00 00|30 04 00 00 | UTF-32LE
00 00 04 3E|00 00 04 3C|00 00 04 35|00 00 04 3D|00 00 04 30 | UTF-32BE
о |м |е |н |а | омена
Michael Justin

Geändert von mjustin ( 9. Mai 2015 um 16:10 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 16:15
Kann man davon ausgehen, dass UTF-16- und UTF-32-Dateien statistisch signifikant so gut wie immer einen BOM enthalten?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 16:38
Wieso findest Du meine Heuristik denn unsicher? Wie willst du denn sonst Text-Dateien von irgendwelchen anderen Dateien unterscheiden? Genau genommen müsstest Du auch noch prüfen, ob die Datei Wörter enthält, oder zählst Du eine Base-64 Codierung auch zu Textdateien? Also, 'FXYyya678pphr'.. ist das jetzt eine Textdatei?

Und die paar Bytes an BOM können ja auch in jeder Binärdatei am Anfang stehen, ergo solltest du noch die nächsten paar Bytes analysieren. Meinst du nicht auch?
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 17:03
Wie ich schon zu Anfang sagte: Ich bin mir der Problematik dieser Unterscheidung bewusst. Letztlich wird es wohl darauf hinauslaufen, für welchen speziellen Zweck man die Unterscheidung benötigt. Denn man könnte den Aufwand auf die Spitze treiben, indem man z.B. eine semantische Prüfung für alle existierenden Sprachen einbaut usw.

Könnt ihr aber die heuristische Prüfung etwas näher spezifizieren, vielleicht sogar mit etwas Code unterlegen (bezogen auf die obige Funktion).
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 17:21
Mir ist gerade ein Gedanke gekommen, wie man eine Heuristik abseits von BOM & Co. implementieren könnte: Es müsste doch möglich sein, eine Art statistischen "Streuungs"-Faktor (oder grob gesagt "statistischer Fingerabdruck") der Bytes zu berechnen, der bei "Binärdateien" signifikant von "Textdateien" abweichen sollte. Was haltet ihr davon?

Geändert von PeterPanino ( 9. Mai 2015 um 17:23 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 18:37
@PeterPanino

Dein Problem zeigt gewisse Ähnlichkeiten zu diesem dort
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 22:00
Mir ist gerade ein Gedanke gekommen...eine Art statistischen "Streuungs"-Faktor (oder grob gesagt "statistischer Fingerabdruck") der Bytes zu berechnen, der bei "Binärdateien" signifikant von "Textdateien" abweichen sollte. Was haltet ihr davon?
Ist viel zu aufwendig und unsicher. Meine bisherigen Tests haben gezeigt, ..
Das ist genau das, was ich vorgeschlagen habe: Einige Zeichen können in Textdateien nicht vorkommen, aber auf der anderen Seite müsste man noch etwas genauer analysieren, was der Unterschied zwischen einer Datei ist, die einen Text enthält, und einer 'Binärdatei', die zufällig nur Buchstaben enthält.
Aber deine Idee ist natürlich viel besser. Klar.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: Datei auf Indikatoren für Binärdatei testen?

  Alt 9. Mai 2015, 16:50
Kann man davon ausgehen, dass UTF-16- und UTF-32-Dateien statistisch signifikant so gut wie immer einen BOM enthalten?
Auf keinen Fall! zB. für XML ist es nicht erforderlich.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz