Speichern Textdateien ihre Kodierungsmethode für die spätere Dekodierung?

19
  1. Ich habe mich gefragt, ob einige Textdateien ihre Kodierungsmethode zusammen mit ihrem Textinhalt für die spätere Dekodierung speichern.
  2. Oder ist es die Aufgabe des Text-Viewers, die Codierungsmethode für eine bestimmte Textdatei zu erraten, und das Erraten ist möglicherweise nicht immer korrekt? Wenn ja, wie errät ein Textbetrachter das?
Tim
quelle
Wenn es sich um eine Klartextdatei handelt, werden keine Informationen zur Kodierung gespeichert. Für Rich Text kann ich allerdings nichts sagen.
Wuffers
Ja, ich spreche von Klartext.
Tim

Antworten:

19

Ich habe mich gefragt, ob einige Textdateien ihre Kodierungsmethode zusammen mit ihrem Textinhalt für die spätere Dekodierung speichern.

Die Antwort von Mark Szymanski ist richtig - es gibt keine expliziten Codierungsinformationen in einer Nur-Text-Datei - das ist die Definition von "Nur-Text-Datei", "Nur" bezieht sich auf die Tatsache, dass die Datei keine Metadaten enthält.

Allerdings werden einige Anwendungen ein Ort Byte-Order Mark (BOM) in Textdateien codiert als UTF-16 oder UTF-32 / UCS-4. Die Stückliste soll nicht wirklich die Kodierung anzeigen (sie gibt die Bytereihenfolge an, wie der Name sagt), aber viele Anwendungen verwenden das Vorhandensein der Stückliste, um UTF-16 / UTF-32 zu erkennen, sodass sie als Kodierungsindikator dient.

Oder ist es die Aufgabe des Text-Viewers, die Codierungsmethode für eine bestimmte Textdatei zu erraten, und das Erraten ist möglicherweise nicht immer korrekt? Wenn ja, wie errät ein Textbetrachter das?

Ja, der Textbetrachter kann nur raten. In der Regel werden einige Heuristiken verwendet:

  • In einigen Codierungen (insbesondere in UTF-8) sind nicht alle Byte-Sequenzen gültig. Eine Anwendung kann also einfach versuchen, die Datei als UTF-8 zu dekodieren. Wenn dies erfolgreich ist, lautet die Datei wahrscheinlich UTF-8. Wenn dies fehlschlägt, indem eine ungültige Bytefolge gefunden wird, ist dies nicht der Fall. So funktioniert zB vimstandardmäßig: Es wird zuerst versucht, UTF-8 beim Lesen einer Datei zu verwenden; Wenn dies fehlschlägt, wird auf ISO-8859-1 zurückgegriffen.
  • In den meisten älteren 8-Bit-Codierungen ist jede Byte-Sequenz gültig. In diesem Fall können Sie die Codierung manchmal anhand des Byte-Histogramms (Häufigkeit verschiedener Bytes / Byte-Sequenzen) erraten. Der Internet Explorer hat dies getan, um die Kodierung einer Seite zu "erraten". Dies ist jedoch sehr fehleranfällig, so dass dies nur wenige Programme tun.

In den meisten Fällen muss einem Programm explizit mitgeteilt werden, wie die Codierung einer Textdatei lautet, sonst kann es sie nicht richtig lesen.

sleske
quelle
Wie funktioniert es file -bi, wenn die Stückliste nicht verwendet wird?
Old Geezer
@OldGeezer: Verfügt fileüber verschiedene Heuristiken zur Bestimmung des Dateityps und der Codierung. Meistens wird nach bestimmten Zeichenfolgen oder Bytefolgen in der Datei gesucht. Wenn Sie genauere Informationen wünschen, müssen Sie wahrscheinlich die Quelle lesen. Oder stellen Sie einfach eine separate Frage :-).
sleske
@OldGeezer: Und BTW, filekann die meisten Textkodierungen nicht zuverlässig erkennen (weil das sehr schwierig ist). Die Manpage enthält einige Informationen zur Zeichensatzerkennung - filemeist werden nur ASCII, UTF-8/16, EBCDIC und ISO-8859-x erkannt. Beispielsweise wird eine in KOI8-R codierte Datei als "ISO-8859-1" gemeldet.
sleske
4

In einfachen Textdateien werden keine Informationen zu ihrer Kodierung gespeichert. Ein Betrachter bestimmt es basierend auf der Zeichenkodierung, die Sie dafür festgelegt haben. Es kann es nicht selbst bestimmen, da es dem Computer egal ist.

Wuffers
quelle
Daher können Textbetrachter nicht zwischen Codierungsmethoden für Textdateien unterscheiden. Wenn ein Text-Viewer eine Objekt- / ausführbare Datei erhält, kann er dann erkennen, dass es sich nicht um eine Textdatei handelt?
Tim
Nein, das kann es nicht. Es wird versucht, es wie eine Textdatei zu öffnen. Und natürlich wird ein Haufen verstümmelter Sachen gezeigt. Die einzige Möglichkeit, zwischen Codierungen zu unterscheiden, besteht darin, die Codierung manuell zu ändern.
Wuffers
@Tim: Die meisten Textbetrachter verwenden eine Heuristik, um zu überprüfen, ob es sich um eine Textdatei handelt. Wenn die Datei viele nicht druckbare Zeichen enthält, warnen viele Betrachter und Bearbeiter (z. B. lessund grepunter Unix / Linux).
sleske