Erkennen und Lesen von Unicode- und nicht Unicode-Dateien
Paul
- perl
Hallo,
So, nach fruchtlosem Herumgesuche und Lesen von FAQ's habe ich nun
einen Grad an Verwirrung erreicht, der sich nicht mehr toppen lässt.
Folgendes Problem:
Ich lese aus einem Verzeichnis rekursiv Text- und XML-Dateien, formatiere sie, häng sie aneinander und schreibe sie wiederum in eine
HTML-Datei.
Manche sind ascii-encoded, manche utf8.
Vorkommende Stellen wie z.B. (in utf8-files):
• Image display
werden im letztendlichen Output zu:
• Image display
Meine Frage(n):
* Wie kann ich erkennen, um was für ein Encoding es sich bei der
Textdatei handelt?
* Muss ich Perl beim Einlesen sagen, dass da jetzt utf8 kommt, oder
den eingelesenen String dann konvertieren?
* Muss ich beim Schreiben was beachten? In welchem Encoding speichere
ich die Dateien am Besten?
* Ich benutze Perl 5.8.0, hat das Auswirkungen?
Wie man unschwer erkennen kann, fehlt mir wohl hier und da das
grundlegende Verständnis in Sachen Character-Encoding. Wäre nett,
wenn mir jemand einpaar grundlegende Tips gibt, wo ich anfangen kann,
bzw. wie man sowas am besten angeht.
Besten Dank,
Paul
Moin!
* Wie kann ich erkennen, um was für ein Encoding es sich bei der
Textdatei handelt?
Das Problem ist, dass utf-8 auch genausogut als vollkommen gültiges ASCII oder ISO-8859-1 betrachtet werden kann. Im Prinzip gibt es also nur zwei Möglichkeiten:
1. Du "weißt" es, weil du selbständig eine entsprechende Information über die in der Datei benutzte Zeichencodierungsform irgendwo mitspeicherst. Beispielsweise in einem HTML-Metatag.
2. Du weißt es nicht, und mußt raten.
Methode 2 ist dabei natürlich sehr stark abhängig von der Qualität des Ratemechanismus und insbesondere von den tatsächlichen Daten.
Beispielsweise könnte es sich dann um eine UTF-8-codierte Datei handelt, wenn relativ viele 7-Bit-ASCII-Zeichen vorkommen, und verhältnismäßig viele deutsche UTF-8-Umlaute (erkennbar am charakteristischen Tilde-A). Es kann keine UTF-8-Datei sein, wenn ungültige Bytewerte darin vorkommen.
* Muss ich Perl beim Einlesen sagen, dass da jetzt utf8 kommt, oder
den eingelesenen String dann konvertieren?
UTF-8 bzw. Unicode ist eigentlich der zu bevorzugende Zeichenmodus, da dir in deinen UTF-8-Dateien ja durchaus Zeichen begegnen können, die in einer 8-Bit-Zeichencodierung nicht dargestellt werden können.
* Muss ich beim Schreiben was beachten? In welchem Encoding speichere
ich die Dateien am Besten?
UTF-8.
Hi,
- Du "weißt" es, weil du selbständig eine entsprechende Information über die in der Datei benutzte Zeichencodierungsform irgendwo mitspeicherst. Beispielsweise in einem HTML-Metatag.
- Du weißt es nicht, und mußt raten.
3. Die Datei verrät es durch Anwesenheit eines BOM …
cu,
Andreas