2016-04-08 3 views
4

Ich habe Zweifel über XML-Codierung während der Verarbeitung (Unmarshall) der XML-Datei. Wir geben die Codierung der XML-Datei am Anfang der Datei wie folgt ein.Wie entscheidet das Programm die Codierung der XML-Datei?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

Meine Frage ist, nachdem das Programm diese Zeile liest, es entscheidet, dass der folgende Inhalt in UTF-8 codiert ist. Aber um diese erste Zeile zu lesen, wie entscheidet das Programm, dass es in UTF-8 kodiert ist? Ich meine, beim Lesen des Bytestroms, wie weiß das Programm, dass es die Codierung für die erste Zeile verwenden muss?

Grüße, Mayuran

Antwort

1

Es wird in Abschnitt F.1 geschrieben. die XML-Spezifikation:

F.1 Erkennung ohne externe Kodierungsinformation

Da jeder XML-Entity durch externe Codierung Informationen nicht begleitet und nicht in UTF-8 oder UTF-16-Codierung muss mit einem XML beginnen Encoding-Deklaration, in der die ersten Zeichen <?xml, sein müssen, kann jeder konforme Prozessor nach zwei bis vier Oktetten Eingang erkennen, welche der folgenden Fälle zutreffen. In dieser Liste zu lesen, es , dass in UCS-4 helfen zu wissen, < ist #x0000003C und ? ist #x0000003F und die Byte Order Mark erforderlich von UTF-16 Datenströmen sind #xFEFF. Die Notation ## verwendet wird, jedes Byte-Wert zu bezeichnen, außer , dass zwei aufeinander folgende ## s nicht beide 00.

Grundsätzlich werden können, gibt es zwei Möglichkeiten:

  1. Es wird ein Byte-Order- Markierung (BOM)
  2. Es gibt keine Stückliste.

Die specification dann klar Tabellen von spezifischen Oktett dokumentiert Ströme, die der Prozessor verwenden, sollten Sie die Codierung aufbrauchen Durch sehen die encoding Erklärung zu bestimmen.

+0

** Dort ** es ist. Ich habe die Spezifikationen durchgesehen, wusste, dass es da war, aber ich bin nicht ganz auf F.1 gegangen, bevor Sie das oben genannte gepostet haben. Schön. –

+0

@RobAu, danke für die Antwort, aber ich kann immer noch nicht verstehen, um den Text " Mayuran

+0

Wenn es keine Byte Order Mark gibt, sollten Sie die ersten paar Bytes lesen und die verschiedenen Codierungen ausprobieren, wie UTF-16. Die Codierung, die die Zeichenfolge " RobAu