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 perfekt gültige Skripte zu sein. Wie kann ich feststellen, welche Codierungen die Datei ohne Notepad ++ hat?
enca
undchardet
für POSIX-Systeme.iconv
Insbesondere ist dies für diesen Zweck nützlich. Im Wesentlichen iterieren Sie die fehlerhaften Zeichenfolgen / Texte durch verschiedene Codierungen, um festzustellen, welche funktionieren. Sie gewinnen, wenn die Charaktere nicht mehr beschädigt sind. Ich würde gerne hier mit einem programmatischen Beispiel antworten. Aber es ist leider eine geschützte Frage.chardet
oderchardetect
nicht verfügbar auf Ihrem System, dann können Sie das Paket über Ihren Paketmanager (zBapt search chardet
- auf Ubuntu / Debian heißt das Paket normalerweisepython-chardet
oderpython3-chardet
) oder über Pip mitpip install chardet
(oderpip install cchardet
für die schnellere c-optimierte Version) installieren .Antworten:
Dateien werden in der Regel mit einem Dateikopf kodiert. Es gibt viele Beispiele hier . Selbst wenn Sie den Header lesen , können Sie jedoch nie sicher sein, welche Codierung eine Datei tatsächlich verwendet .
Zum Beispiel wird eine Datei mit den ersten drei Bytes
0xEF,0xBB,0xBF
ist wahrscheinlich eine UTF-8 - codierte Datei. Möglicherweise handelt es sich jedoch um eine ISO-8859-1-Datei, die mit den Zeichen beginnt
. Oder es könnte ein ganz anderer Dateityp sein.Notepad ++ gibt sein Bestes, um zu erraten, welche Codierung eine Datei verwendet, und meistens, wenn sie es richtig macht. Manchmal ist es jedoch falsch - deshalb gibt es das Menü "Codierung", damit Sie die beste Annahme überschreiben können.
Für die beiden Codierungen, die Sie erwähnen:
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.quelle
Du kannst nicht. Wenn Sie das tun 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 „kluge Vermutung“ durchführen. Das Ergebnis ist jedoch häufig mehrdeutig, da dieselbe Byte-Sequenz möglicherweise in mehreren Codierungen gültig ist.
quelle