2015-06-22 7 views
10

Wie kann ich sicherstellen, dass eine Datei von Menschen lesbar ist.Wie kann man überprüfen, ob eine Datei von Menschen gelesen werden kann?

Damit möchte ich im Wesentlichen überprüfen, ob die Datei eine txt ist, ein yml, ein doc, eine json Datei und so weiter.

Das Problem ist, dass in dem Fall, dass ich diese Überprüfung durchführen möchten, sind Dateierweiterungen irreführend, und damit meine ich, dass eine einfache Textdatei (die .txt sein sollte) eine Erweiterung von .d und verschiedene andere: - (

Was ist der beste Weg, um sicherzustellen, dass eine Datei, die von Menschen gelesen werden kann

Bisher habe ich mein Glück mit den Erweiterungen versucht haben, wie folgt:?

private boolean humansCanRead(String extention) { 
     switch (extention.toLowerCase()) { 
     case "txt": 
     case "doc": 
     case "json": 
     case "yml": 
     case "html": 
     case "htm": 
     case "java": 
     case "docx": 
      return true; 
     default: 
      return false; 
     } 
    } 

Aber wie gesagt Erweiterungen nicht wie erwartet

EDIT: Um zu klären, bin ich auf der Suche nach einer Lösung, die Plattform unabhängig und ohne Verwendung externer Bibliotheken ist, und um einzugrenzen, was ich meine "menschenlesbar", meine ich einfache Textdateien, die Zeichen jeder Sprache enthalten Es macht mir nichts aus, wenn der Text in der Datei Sinn macht, als ob er verschlüsselt wäre.

Vielen Dank für alle Antworten! : D

+10

Ich kann docx und doc nicht lesen. (Und in der Tat kann mein Computer auch nicht.) – aioobe

+1

Sie können versuchen, Apache Tika den Dateityp (basierend auf dem Inhalt) zu erhalten. – Ouney

+1

... und ich kann mir ein paar .txt-Dateien vorstellen, die ich auch nicht lesen könnte. (Ich wette, es gibt zum Beispiel einige auf Französisch.) Was ich versuche zu sagen ist, dass es unmöglich ist, diese Methode genau so zu implementieren, wie Sie sie definiert haben. – aioobe

Antwort

1

Bei einigen Dateien hilft eine Überprüfung des Anteils der Bytes im druckbaren ASCII-Bereich. Wenn mehr als 75% der Bytes in diesem Bereich innerhalb der ersten paar hundert Bytes liegen, ist es wahrscheinlich "lesbar".

Einige Dateien haben Header, wie die verschiedenen Formen von BoM auf UTF-Dateien, die 0xA5EC, die MS-doc-Dateien startet oder die "MZ" -Signatur am Anfang von .exe, die Ihnen sagen wird, ob die Datei lesbar ist oder nicht .

Viele moderne Textdateien sind in einem der UTF-Formate, die normalerweise durch Lesen des ersten Chunks der Datei identifiziert werden können, auch wenn sie keine BoM haben.

Im Grunde müssen Sie viele verschiedene Dateitypen durchlaufen, um zu sehen, ob Sie eine Übereinstimmung erhalten. Laden Sie das erste Kilobyte der Datei in den Speicher und führen Sie viele verschiedene Überprüfungen durch. Sobald Sie einige Daten haben, können Sie die Überprüfungen anordnen, um zuerst nach den gebräuchlichsten Formaten zu suchen.

+0

Danke! Das war was ich brauchte, ich werde einen Algorithmus entwickeln, um diese zu überprüfen:) Ich wusste nicht, wo solche Header: 3 –

+0

Um die Header-Bytes zu finden Ich googelte "XXX Dateiformat" für verschiedene Werte von XXX. – rossum

+0

Hmm, ich habe es mir auch angeschaut, aber es ist eine große Implementierung, um das für alle unterstützten Dateitypen zu tun. : 3 Vielen Dank aber: D –

2

Im Allgemeinen können Sie das nicht tun. Sie können eine language identification algorithm verwenden, um zu erraten, ob ein gegebener Text ein Text ist, der von Menschen gesprochen sein könnte. Da Ihr Beispiel formale Sprachen wie HTML enthält, sind Sie jedoch in großen Schwierigkeiten. Wenn Sie Ihre Prüfung für (eine endliche Menge von) formalen Sprachen wirklich implementieren möchten, könnten Sie eine GLR parser verwenden, um die (mehrdeutige) Grammatik zu analysieren, die all diese Sprachen kombiniert. Dies würde jedoch das Problem der Syntaxfehler noch nicht lösen (obwohl es möglich wäre, eine Heuristik zu definieren). Schließlich müssen Sie berücksichtigen, was Sie eigentlich mit "menschenlesbar" meinen: z. enthalten Sie Base64?

edit: Falls Sie nur an dem Zeichensatz interessiert sind: Siehe this questions' answer. Im Grunde genommen müssen Sie die Datei lesen und prüfen, ob der Inhalt in welcher Zeichencodierung auch immer lesbar ist (utf-8 sollte die meisten Ihrer realen Fälle abdecken).

+0

Danke, durch Menschen lesbar ich meine eine Datei, die Klartext enthält ich nicht wirklich etwas dagegen, wenn es verständlich ist, wenn es" FEWRREWGAERGVS "oder" Wie sind Du machst das "Ich muss mir später Sorgen machen. Für jetzt möchte ich alles ausschließen, das Dateien ausgenommen wird, die reinen Text enthalten. Ihre Antwort ist jedoch Enlightning! Ty! aber ich brauche immer noch diese Art von Trennung. Wie ich bereits in einem Kommentar erwähnt habe, könnten die Dateien eine beliebige Sprache sein. : D –

+0

Ok die Bearbeitung hilft auch, aber wie ich oben gepostet^ "Ich habe eine Vorschau erstellt, wo die lesbaren Dateien als kleine Vorschau gezeigt werden, aber wenn ihre Vorschau aussieht wie" PK «L ~ F ώΚ σMΜΛLK-. Ρ K- * ΞΜΟ³R0Τ3ΰεβε PK²ξ ", und obwohl dies gültige griechische Zeichen sind, wird es nicht ideal sein D:" : - ( –

Verwandte Themen