Zeichensatz erkennen


Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich arbeite momentan daran, eine CSV Datei in eine Datenbank einzulesen. Diese Datei ist normalerweise ISO-8859-15 codiert. Wenn ich die betroffenen Felder mit mb_convert_encoding() in UTF-8 umwandle, stehen die anschließend auch korrekt mit Umlauten in der Datenbank.

Es läßt sich jetzt aber nicht ausschließen, daß die Datei mal UTF-8 kodiert kommt. Wenn ich die dann einlese, erscheinen nur ? anstelle der Umlaute. Ein vorheriges mb_detect_encoding() ergibt aber immer UTF-8, was mir im Falle einer erforderlichen Umwandlung natürlich nicht hilft.

Gibt es eine Möglichkeit, den Zeichensatz eines Strings oder der Datei korrekt zu ermitteln?
 

sheel

I love Asm
Hi

Generell: Nein, das ist prinzpiell unmöglich.
Jede Art von Erkennung ist nur Raten, meistens anhand von Vorhandensein und Anzahl bestimmter Bytefolgen.

Für deinen Fall könnte man die Ermittlung evt. etwas verbessern, wenn es wirklich nur ISO-8859-15 und UTF-8 sein können (?)
(aber auch dann ist es noch immer Raten - je nach Auswirkungen einer Falscherkennung evt. nicht akzeptabel)
 
Zuletzt bearbeitet:

Sprint

Erfahrenes Mitglied
Hi Sheel,

theoretisch könnte es alles sein. Die Vorgabe der Schnittstellenbeschreibung ist ISO-8859-15 und da die Dateien i.d.R. von Dienstleistern kommen, sollte das in den meisten Fällen passen. Aber das ist halt nicht wirklich sicher.
Na ja, kann man nix machen. Danke trotzdem!