4 Stimmen

Kodierung der XML-Deklaration

Was macht es eigentlich? Nach meinem grundlegenden Verständnis ist XML nur ein formatierter Text. Es gibt also keine binäre<->Text-Transformation.

Ich vermute, dass der einzige Unterschied zwischen UTF-8- und ASCII-Kodierung darin besteht, dass die ASCII-Kodierung dem XML-Schreiber mehr Arbeit abverlangt, da alle Nicht-ASCII-Zeichen in XML-Entities umgewandelt werden und nicht nur reservierte XML-Zeichen. ASCII-kodiertes XML kann also immer noch UTF-8-Zeichen enthalten, nur wird es etwas länger und hässlicher sein.

Oder hat sie eine andere Funktion?

Aktualisierung:

Ich verstehe sehr gut, wie einzelne Zeichen durch Kodierung in Byte(s) umgewandelt werden. XML ist jedoch eine reine Textauszeichnung und tut dies zu keinem Zeitpunkt.

Die eigentliche Frage ist, warum der Wert der XML-Kodierung in der XML-Datei gespeichert wird? Oder was ist der Fall, wenn ein XML-Leser wissen muss, welche Kodierung für ein bestimmtes XML-Dokument verwendet wurde?

9voto

Peter O. Punkte 30542

Siehe Anhang F in der XML-Spezifikation, " Automatische Erkennung von Zeichenkodierungen ".

Insbesondere "XML encoding value is stored in the XML", weil XML-Prozessoren standardmäßig davon ausgehen müssen, dass der Inhalt in UTF-16 oder UTF-8 vorliegt, wenn keine externen Metadaten außerhalb des XML-Dokuments vorhanden sind. Die XML-Deklaration ist für solche Fälle gedacht, in denen solche Metadaten nicht vorhanden sind.

Ein weiterer Vorteil der XML-Verarbeitung von Kodierungen ist, dass ein XML-Prozessor auf diese Weise nur zwei Kodierungen unterstützen muss, nämlich UTF-8 und UTF-16. Wenn der Prozessor feststellt, entweder in externen Metadaten oder in der XML-Deklaration, dass das Dokument in einer Kodierung vorliegt, die Kodierung vorliegt, die er nicht unterstützt, kann er schneller scheitern, als wenn er das Dokument weiter liest (lange (lange nach der Deklaration) und auf eine unerwartete Bytefolge für die Kodierung stößt die durch implementierungsabhängige Heuristiken erkannt wird.

4voto

Jason Viers Punkte 1677

Ich empfehle sehr, SEHR empfehlenswert zu lesen Das absolute Minimum, das jeder Softwareentwickler unbedingt über Unicode und Zeichensätze wissen muss (keine Ausreden!) . Sie sagen, XML sei "nur Text", als ob das alles einfach machen würde, aber selbst wenn man weiß, dass es sich um Text und nicht um ein strukturiertes binäres Format handelt, bedeutet das nicht, dass man genau weiß, wie man es lesen kann oder welche Zeichen darin enthalten sind.

Dies ist keine "Lesen Sie das Handbuch!"-Antwort, sondern ich glaube, dass die Festlegung dieser Grundlinie, wie schwierig Text sein kann, helfen wird zu erklären, warum es die XML-Deklaration gibt.

Warum muss die XML-Deklaration überhaupt kodiert werden?

Dies ist eine der Ideen, die in dem Artikel angesprochen werden, aber es lohnt sich, sie hier zu betonen: Jeder Text hat eine Kodierung. Es gibt keinen "reinen Text". . ASCII ist eine Kodierung, auch wenn wir die meiste Zeit nicht darüber nachdenken. In der Vergangenheit haben wir oft den Kopf in den Sand gesteckt und angenommen, dass alles ASCII ist, aber das ist in der heutigen Zeit nicht mehr möglich. Die Kodierung der XML-Deklaration hilft uns dabei, während eine .txt-Datei keinen Hinweis auf ihre Kodierung enthält.

2voto

ChrisJ Punkte 5061

Ja, eine XML-Datei ist eine Textdatei, d. h. eine Folge von Zeichen. Eine Datei ist eine Folge von Bytes . Wie werden nun einzelne Zeichen kodiert, d. h. in eine Folge von Bytes umgewandelt? Es gibt mehrere Möglichkeiten, Zeichen in Bytes zu kodieren; die "encoding"-Deklaration gibt an, welche verwendet wird.

Daher spielt die "Encoding"-Deklaration eine sehr wichtige Rolle: eine braucht unbedingt zu wissen, welche Kodierung verwendet wird, um lediglich Lesen der Zeichen aus einer Datei . Wird keine Kodierung angegeben, verfügt XML über eine Reihe von Standardkodierungen, die vom Vorhandensein eines "Byte Order Marker" (BOM) abhängen. Wenn kein BOM vorhanden ist, ist die Standardkodierung UTF-8.

ASCII ist eine der einfachsten Formen der Kodierung. Sie kann nur eine Spanne von 128 lateinischen Grundzeichen darstellen. UTF-8 ist aufwändiger; es kann alle Unicode Zeichensatz. Sie haben also recht, wenn Sie ASCII verwenden, müssen Sie XML-Entitäten verwenden, um die riesige Menge an Zeichen darzustellen, die es in Unicode, aber nicht in ASCII gibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X