it-swarm.com.de

Wie erkenne ich die Kodierung einer Datei?

Auf meinem Dateisystem (Windows 7) habe ich einige Textdateien (dies sind SQL-Skriptdateien, falls dies wichtig ist).

Beim Öffnen mit Notepad ++ wird im Menü "Codierung" angegeben, dass einige von ihnen eine Codierung von "UCS-2 Little Endian" und einige von "UTF-8 ohne Stückliste" aufweisen.

Was ist der Unterschied hier? Sie scheinen alle vollkommen gültige Skripte zu sein. Wie kann ich feststellen, welche Codierungen die Datei ohne Notepad ++ hat?

127
Marcel

Dateien geben ihre Codierung im Allgemeinen mit einem Dateikopf an. Es gibt viele Beispiele hier . Selbst wenn Sie den Header lesen, können Sie nie sicher sein, welche Codierung eine Datei wirklich verwendet .

Beispielsweise ist eine Datei mit den ersten drei Bytes 0xEF,0xBB,0xBF wahrscheinlich eine UTF-8-codierte Datei. Es kann sich jedoch um eine ISO-8859-1-Datei handeln, die zufällig mit den Zeichen  Beginnt. Oder es könnte ein ganz anderer Dateityp sein.

Notepad ++ versucht nach besten Kräften zu erraten, welche Codierung eine Datei verwendet, und meistens wird sie richtig ausgeführt. Manchmal wird es jedoch falsch verstanden - deshalb gibt es das Menü "Codierung", sodass Sie die beste Vermutung überschreiben können.

Für die beiden Codierungen, die Sie erwähnen:

  • Die "UCS-2 Little Endian" -Dateien sind UTF-16-Dateien (basierend auf dem, was ich aus den Informationen verstehe hier ), also wahrscheinlich Beginnen Sie mit 0xFF,0xFE als die ersten 2 Bytes. Nach allem, was ich sagen kann, beschreibt Notepad ++ sie als "UCS-2", da es bestimmte Facetten von UTF-16 nicht unterstützt.
  • Die "UTF-8 ohne Stückliste" -Dateien haben keine Header-Bytes. Das bedeutet das Bit "ohne Stückliste".
107
vaughandroid

Du kannst nicht. Wenn Sie das könnten, gäbe es nicht so viele Websites oder Textdateien mit „zufälligem Kauderwelsch“. Aus diesem Grund wird die Codierung normalerweise zusammen mit der Nutzlast als Metadaten gesendet.

Falls dies nicht der Fall ist, können Sie nur eine „intelligente Vermutung“ anstellen. Das Ergebnis ist jedoch häufig nicht eindeutig, da dieselbe Bytesequenz möglicherweise in mehreren Codierungen gültig ist.

19
Marco