XML-Codierung und DOM-Schnittstellenmethoden

In diesem Artikel werden XML-Codierung und DOM-Schnittstellenmethoden beschrieben.

Ursprüngliche Produktversion: Extensible Markup Language
Ursprüngliche KB-Nummer: 275883

Zusammenfassung

Ein großer Vorteil von XML-Daten (Extensible Markup Language) besteht darin, dass es sich um eine unabhängige Plattform handelt. Es muss jedoch eine korrekte Codierung angegeben werden, um eine ordnungsgemäße Übertragung von XML-Daten zwischen verschiedenen Plattformen sicherzustellen. Im Whitepaper Gewusst wie: Codieren von XML-Daten werden allgemeine XML-Codierungsprobleme ausführlich behandelt: Codieren von XML-Daten.

In den meisten Szenarien stammen XML-Codierungsfehler aus den verschiedenen Standardcodierungseinstellungen der METHODEN und Schnittstellen des XML-Parsers (MSXML). Ein klares Verständnis dieser Standardeinstellungen trägt dazu bei, die Codierungsfehler zu verhindern.

XML-Codierungen

MSXML unterstützt alle Codierungen, die von Internet Explorer unterstützt werden. Die Unterstützung von Internet Explorer hängt davon ab, welche Sprachpakete auf dem Computer installiert sind. Diese Informationen werden unter dem Registrierungsschlüssel gespeichert: HKEY_CLASSES_ROOT\MIME\Database\Charset.

MSXML verfügt über native Unterstützung für die folgenden Codierungen:

UTF-8
UTF-16
UCS-2
UCS-4
ISO-10646-UCS-2
UNICODE-1-1-UTF-8
UNICODE-2-0-UTF-16
UNICODE-2-0-UTF-8
It also recognizes (internally using the WideCharToMultibyte API function for mappings) the following encodings:
US-ASCII
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
WINDOWS-1250
WINDOWS-1251
WINDOWS-1252
WINDOWS-1253
WINDOWS-1254
WINDOWS-1255
WINDOWS-1256
WINDOWS-1257
WINDOWS-1258

Der richtige Ort zum Angeben der Codierung für die Daten ist die XML-Deklaration. Wenn die Daten beispielsweise mit ISO-8859-1 Standard codiert sind, können Sie dies wie folgt angeben:

<?xml version="1.0" encoding="ISO-8859-1"?>

Ohne diese Informationen ist die Standardcodierung UTF-8 oder UTF-16, abhängig vom Vorhandensein einer UNICODE-Bytereihenfolgemarke (BOM) am Anfang der XML-Datei. Wenn die Datei mit einer UNICODE-Bytereihenfolgemarke (0xFF 0xFE) oder (0xFE 0xFF) beginnt, wird das Dokument als in UTF-16-Codierung betrachtet. Andernfalls ist sie in UTF-8. Die Save-Methode der IXMLDOMDocument -Schnittstelle behält die ursprüngliche Codierung des Dokuments bei. Der Standardwert für diese Methode ist UTF-8.

MSXML DOM-Fehler

Zwei häufige Fehler, die von den DOM-Schnittstellenmethoden (XML Document Object Model) zurückgegeben werden, sind:

  • Im Textinhalt wurde ein ungültiges Zeichen gefunden.

  • Der Wechsel von der aktuellen Codierung zur angegebenen Codierung wird nicht unterstützt.

Bei der Lademethode der IXMLDOMDocument Schnittstelle treten diese Fehler in der Regel unter den folgenden Bedingungen auf:

  • Es wird keine Codierung angegeben, am Anfang der XML-Datei wird keine Bytereihenfolgenmarkierung gefunden, und die Daten enthalten Sonderzeichen.

  • Die angegebene Codierung stimmt nicht mit der tatsächlichen Codierung der XML-Daten überein. Eine bewährte Methode besteht darin, immer die richtige Codierung innerhalb der XML-Deklaration anzugeben, anstatt die Standardcodierung zu akzeptieren.

Mit den MSXML-Parserversionen 2.5, 2.5 SP1 und 2.6 kann die loadXML -Methode von IXMLDOMDocument nur UTF-16- oder UCS-2-codierte Daten laden. Jeder Versuch, XML-Daten zu laden, die mit einem anderen Codierungsformat codiert sind, führt zu folgendem Fehler:

Der Wechsel von der aktuellen Codierung zur angegebenen Codierung wird nicht unterstützt. Mit der Veröffentlichung von MSXML 3.0 (Msxml3.dll) wird diese Einschränkung entfernt, und der folgende Code wird ohne Fehler ausgeführt:

hr = pXMLDoc->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag1>Abcdef</tag1>");

Hinweis

Die xml-Eigenschaft der IXMLDOMDocument -Schnittstelle schreibt die XML-Daten als UTF-16-codiert, aber ohne die Bytereihenfolgemarke am Anfang. Dies kann zu Codierungsproblemen führen.

Diese Fehler können auch auftreten, wenn Sie die transformNode -Methode der IXMLDOMNode -Schnittstelle mit einer XSL- oder XSLT-Datei aufrufen, in der die XML-Codierungsinformationen wie folgt angegeben sind:

<xsl:output method="xml" encoding="UTF-8" />

Die transformNode -Methode gibt einen BSTR zurück, bei dem es sich definitionsgemäß um UTF-16-codierte Daten handelt. Eine bessere Möglichkeit, die Codierung beizubehalten, besteht darin, die transformNodeToObject -Methode aufzurufen und die Ergebnisse in einem Stream oder in einem neuen XML-Dokument zu speichern und dann zu speichern.

References

System.Xml Namespace