Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8 codiert
wurde?
Danke und Gruß, Marcel
> Hallo!
>
> Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8 codiert
> wurde?
Indem du sie einliest und mittels
unicodecontent = content.decode("utf-8")
decodierts. Wenn das gut gegangen ist - dann hast du vielleicht eine
UTF-8-Datei gehabt. Wenn nicht - dann ganz sicher etwas anderes. Aber es
gibt _keine_ Möglichkeit, festzustellen ob du zB eine latin1-encoding
hattest, und durch Zufall keine nicht-existenten Codepoints aus unicode
referenziert wurden.
Diez
> Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8 codiert
> wurde?
Es gibt Bytefolgen, die man als Marker an den Anfang der Datei schreiben
kann, aber nicht muß. Die kannst du überprüfen. Aber allgemein geht
sowas nicht. Du mußt wissen, was in der Datei drin steht. Alles andere
ist mehr oder weniger gutes Raten.
Gruß,
Achim
Wenn du keine Ansgt vor C-Code hast, kanns du dir ansehen, wie
diverse Editoren das machen - vim zum Beispiel kriegt das bei mir
eigentlich immer hin. Und ich habe einen ganzen Stall voll
verschiedener Encodings rumliegen (UTF-8, ASCII, Latin-1, UTF-16
und sogar EBCDIC *spuck*).
Gruss,
Tobias
--
You don't need eyes to see, you need vision.
> referenziert wurde.
Das unix tool 'file' kann dir mit '-i' flag sagen, welches charset die
datei hat. Wenn du allerdings eine Datei als utf8 abspeicherst, die keine
Umlaute oder sonstige Sonderzeichen beinhaltet, dann kann man die datei
nicht von us-ascii unterscheiden, weil dieses Zeichen in beiden encodings
ident sind.
Martin
Sogar ziemlich sicher.
>> Wenn nicht - dann ganz sicher etwas anderes. Aber es
>> gibt _keine_ Möglichkeit, festzustellen ob du zB eine latin1-encoding
>> hattest, und durch Zufall keine nicht-existenten Codepoints aus unicode
>> referenziert wurde.
Eine mit Latin1 encodedete Datei, die sich als UTF-8 dekodieren lässt,
ist ASCII. Und ASCII ist ein Subset von UTF-8.
> Das unix tool 'file' kann dir mit '-i' flag sagen, welches charset die
> datei hat. Wenn du allerdings eine Datei als utf8 abspeicherst, die keine
> Umlaute oder sonstige Sonderzeichen beinhaltet, dann kann man die datei
> nicht von us-ascii unterscheiden, weil dieses Zeichen in beiden encodings
> ident sind.
... und damit ist die Datei auch UTF-8.
Georg
Kann, und üblicherweise (bei "sinnvollen" Wörtern) ist das auch meistens
so. Aber niemand hindert dich daran, in einer latin1-Datei die
Zeichenfolge öä zu haben (und zu wollen) - die als UTF-8 dann zu öä
dekodiert werden.
Insofern ist die Wahrscheinlichkeit sehr hoch das es klappt - aber eine
Garantie gibt's nicht.
MfG Diez
>> Das unix tool 'file' kann dir mit '-i' flag sagen, welches charset die
>> datei hat. Wenn du allerdings eine Datei als utf8 abspeicherst, die keine
>> Umlaute oder sonstige Sonderzeichen beinhaltet, dann kann man die datei
>> nicht von us-ascii unterscheiden, weil dieses Zeichen in beiden encodings
>> ident sind.
>
> ... und damit ist die Datei auch UTF-8.
Bist du sicher, denn die Zeichen 128-256 sind zwar im ASCII, aber nicht im
UTF-8 vorhanden. Oder ist US-ASCII immmer 7 bit? Vielleicht kannst du
mich da aufklären.
Martin
> Oder ist US-ASCII immmer 7 bit?
Ja, genau so ist es.
Gruß,
Achim