encoding detection
Daniel Thoma
- programmiertechnik
0 Calocybe
Hallo zusammen
Viele Progamme erkennen automatisch den Zeichensatz eines Dokumentes.
Ich möchte das für XML-Files machen. Aber wie geht das?
Der Zeichensatz wird zwar im XML-File (wenn nicht UTF-16 oder UTF-8) angegeben, aber ich kann
diese Information ja erst lesen, wenn ich wenigstens ungefähr weis, in welchem Zeichensatz sie steht.
Auch die Byte Order Markierungen sind von zweifelhaftem Nutzen.
Eine UTF-8 Datei fängt mit der BOM "EF BB BF" (3 Byte) an. Ein normales Asci file, das mit der Zeichenfolge  anfängt, sieht dann aber aus, wie ein UTF-8 File.
Tschüs und Danke
Daniel
Hi!
Viele Progamme erkennen automatisch den Zeichensatz eines Dokumentes.
Ich möchte das für XML-Files machen. Aber wie geht das?
Fuer beliebige Dateien geht das meines Wissens nicht hundertprozentig. Fuer XML-Dateien, die zwingend mit der XML-Deklarationszeile (<?xml version="1.0" ... ?>) anfangen, ist dies in der XML Spec itself beschrieben: http://www.w3.org/TR/REC-xml#sec-guessing (Appendix F).
Der Zeichensatz wird zwar im XML-File (wenn nicht UTF-16 oder UTF-8) angegeben, aber ich kann
diese Information ja erst lesen, wenn ich wenigstens ungefähr weis, in welchem Zeichensatz sie steht.
Ja, aufgrund der Restriktion, dass die XMLDecl am allerersten Byte der Datei stehen muss, kannst Du aber ohne Probleme bis dorthin lesen, falls das ueberhaupt noetig ist. Siehe Link.
Auch die Byte Order Markierungen sind von zweifelhaftem Nutzen.
Eine UTF-8 Datei fängt mit der BOM "EF BB BF" (3 Byte) an.
So? Laut der XML SPec hat UTF-8 gar keine BOM.
Ein normales Asci file, das mit der Zeichenfolge  anfängt, sieht dann aber aus, wie ein UTF-8 File.
Dann ist es aber kein XML-Dokument. Das ist der Punkt, weshalb die Autodetection fuer *beliebige* Dateien nicht 100% moeglich ist.
So long
Hallo Calocybe
Erstmal Danke.
Mein Problem war hauptsächlich, daß man bei Zeichensätzen, die mehreren Bytes pro Zeichen
(UTF-16 UTF-32) verwenden, die XMLDecl nicht einfach eingelesen werden kann, weil die zeichen durch
ein 00-Byte getrennt sind. (ich werde, das dann wohl einfach ignorieren, bis ich weiß, welche
Encoding richtig ist).
»»So? Laut der XML SPec hat UTF-8 gar keine BOM.
Tja, laut Unicode Consotium hat sie eine. Da hab ich sie nähmlich her.
Ein normales Asci file, das mit der Zeichenfolge  anfängt, sieht dann aber aus, wie ein UTF-8 File.
Dann ist es aber kein XML-Dokument. Das ist der Punkt, weshalb die Autodetection fuer *beliebige* Dateien nicht 100% moeglich ist.
Als guter Programierer wollte ich ein lowlevel-problem auch auf dieser ebene behandeln.
Nach dem motto "Der Parser interessiert sich nur für Zeichen, wie die Bytes aussehen geht ihn nichts an".
Programierer lieben halt Schichtenmodelle. ;-)
Tschüs
Daniel