Wie kann ich sagen, dass eine Datei SVG ohne eine magische Zahl ist?

8

Eine SVG Datei ist im Grunde eine XML Datei, daher könnte ich die Zeichenkette <?xml (oder die hexadezimale Darstellung: '3c 3f 78 6d 6c' ) als magische Zahl verwenden, aber es gibt ein paar entgegengesetzte Gründe, dies nicht zu tun zum Beispiel gibt es zusätzliche Leerzeichen, die diesen Check durchbrechen könnten.

Die anderen Bilder, die ich überprüfen muss, sind alle Binärdateien und haben magische Zahlen. Wie kann ich schnell überprüfen, ob die Datei ein SVG -Format ist, ohne die Erweiterung eventuell mit Python zu benutzen?

    
Eduard Florinescu 28.02.2013, 13:03
quelle

2 Antworten

10

XML muss nicht mit der Präambel <?xml beginnen, daher ist das Testen dieses Präfix keine gute Erkennungstechnik - ganz zu schweigen davon, dass jedes XML als SVG identifiziert wird. Eine anständige Erkennung und wirklich einfach zu implementieren ist es, einen echten XML-Parser zu verwenden, um zu testen, ob die Datei wohlgeformtes XML ist, das das Element svg auf oberster Ebene enthält:

%Vor%

Die Verwendung von cElementTree stellt sicher, dass die Erkennung durch die Verwendung von expat effizient ist; timeit zeigt, dass eine SVG-Datei als solche in ~ 200μs und eine Nicht-SVG in 35μs erkannt wurde. Die iterparse API ermöglicht es dem Parser, auf das Erstellen der gesamten Elementstruktur (ungeachtet des Modulnamens) zu verzichten und nur den Anfangsteil des Dokuments zu lesen, unabhängig von der Gesamtdateigröße.

    
user4815162342 28.02.2013, 13:22
quelle
2

Sie könnten versuchen, den Anfang der Datei als Binärdatei zu lesen - wenn Sie keine magischen Zahlen finden können, lesen Sie sie als Textdatei und passen sie zu allen gewünschten Textmustern an. Oder umgekehrt.

    
dmg 28.02.2013 13:14
quelle