Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Erkennen, ob eine Datei UTF-8 ist

2,328 views
Skip to first unread message

Marcel Normann

unread,
May 30, 2006, 10:25:47 AM5/30/06
to
Hallo!

Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8 codiert
wurde?

Danke und Gruß, Marcel

Diez B. Roggisch

unread,
May 30, 2006, 10:29:09 AM5/30/06
to
Marcel Normann wrote:

> 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

Achim Domma

unread,
May 30, 2006, 10:52:45 AM5/30/06
to
Marcel Normann wrote:

> 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

Tobias Klausmann

unread,
May 30, 2006, 1:47:12 PM5/30/06
to
Marcel Normann <marcel....@experimentierkasten.de> wrote:
> Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8
> codiert wurde?

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.

Martin Klaffenboeck

unread,
May 30, 2006, 2:08:28 PM5/30/06
to

> 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

Georg Brandl

unread,
May 30, 2006, 3:03:10 PM5/30/06
to
Martin Klaffenboeck wrote:
> Am Tue, 30 May 2006 16:29:09 +0200 schrieb Diez B. Roggisch:
>
>> Marcel Normann wrote:
>>
>>> 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.

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

Diez B. Roggisch

unread,
May 30, 2006, 3:20:32 PM5/30/06
to
Georg Brandl schrieb:

> Martin Klaffenboeck wrote:
>> Am Tue, 30 May 2006 16:29:09 +0200 schrieb Diez B. Roggisch:
>>
>>> Marcel Normann wrote:
>>>
>>>> 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.
>
> 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.

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

Martin Klaffenboeck

unread,
May 31, 2006, 2:37:32 AM5/31/06
to
Am Tue, 30 May 2006 21:03:10 +0200 schrieb Georg Brandl:

>> 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

Achim Domma

unread,
May 31, 2006, 4:02:41 AM5/31/06
to
Martin Klaffenboeck wrote:

> Oder ist US-ASCII immmer 7 bit?

Ja, genau so ist es.

Gruß,
Achim

Thorsten Kampe

unread,
May 31, 2006, 6:47:54 AM5/31/06
to
* Marcel Normann (2006-05-30 15:25 +0000)

> Wie kann ich erkennen, ob eine eingelesene Datei mit UTF-8 codiert
> wurde?

http://trific.ath.cx/resources/python/pyenca/

Marcel Normann

unread,
May 31, 2006, 6:11:30 PM5/31/06
to
Thorsten Kampe schrieb:

> http://trific.ath.cx/resources/python/pyenca/

Merci!

Gruß, Marcel


0 new messages