Validome-Logo

HTML / XHTML / WML / XML Validator

 
Validome - Validator Startseite de | en
Validome-Logo

XML und XHTML-Dokumente zu Zeichensatzkodierungen

Die Zeichensatzkodierung von XML und XHTML-Dokumenten können anhand von folgenden Quellen ermittelt werden:
  1. Einen HTTP-"charset"-Parameter in einem "Content-Type"-Feld.
  2. An dem encoding-Attribut in der XML-Deklaration.
  3. Am Byte Order Mark eines Dokuments.
  4. An dem binären Muster von "<?xml" im Dokument
Da auch bei XML-Dokumenten, ebenso wie bei HTML-Dokumenten, keine klaren Spezifikationen vorhanden sind, verwenden wir folgende Prioritätenreihenfolge:
  1. Einen HTTP-"charset"-Parameter in einem "Content-Type"-Feld.
  2. Der Byte Order Mark eines Dokumentes.
  3. Das binäre Muster von "<?xml" im Dokument.
  4. An dem encoding-Attribut in der XML-Deklaration

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=ISO-8859-1

  1: <?xml version="1.0" encoding="ISO-8859-1"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>no error</title>
  8:   </head>
  9:   <body/>
 10: </html>

Keine Fehler vorhanden.
Es wird der Zeichensatz aus dem HTTP-Header benutzt.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/xml

  1: <!DOCTYPE root [
  2:   <!ELEMENT foo (#PCDATA)>
  3:   <!ELEMENT root (foo)>
  4: ]>
  5: <root>
  6:   <foo>foo</foo>
  7: </root>

Wenn keine Zeichensatzkodierung ermittelt werden kann, gibt es ein Fallback zu US-ASCII.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: EF BB BF<?xml version="1.0"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>BOM-Charset</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Die Zeichensatzangabe ist nur am Byte Order Mark zu ermitteln, da sonst keine diesbezügliche Angaben existieren.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: <?xml version="1.0"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>automatic</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Dieses in UTF-16 kodierte Dokument enthält keine Zeichensatzkodierung in der XML-Deklaration. Weiterhin wird auch keine Zeichensatzkodierung im HTTP-Header übergeben.
Da die Zeichensatzkodierung des Dokumentes aber anhand des binären Musters von UTF-16 zu erkennen ist, wird diese Zeichensatzkodierung verwendet.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: <?xml version="1.0" encoding="UTF-8"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>XML-Charset</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Da in diesem Dokument nur in der XML-Deklaration eine Zeichensatzkodierung (UTF-8) angegeben ist und im HTTP-Header keine Zeichensatzinformation übertragen wird, kommt diese zur Anwendung.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: <?xml version="1.0"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>no XML-Declaration</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Bei XHTML-Dokumenten führt Validome ein Fallback zu UTF-8 aus wenn keine Zeichensatzkodierungen gefunden wurden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: <?xml version="1.0" encoding="ISO-8859-1"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  5:     <head>
  6:       <title>XML-Charset</title>
  7:       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8:     </head>
  9:     <body>äöüÄÖÜß</body>
 10:   </html>

Wenn die Zeichensatzangabe der XML-Deklaration von der Zeichensatzangabe eines Meta-Tags abweicht, sollte dies gemeldet werden.
Ab hier folgen einige Beispiele mit UTF-32-Kodierten Dokumenten.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=UTF-32

  1: 00 00 FE FF<?xml version="1.0" encoding="UTF-32"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>UTF-32 (1234)</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Validome kann auch in UTF-32 kodierte Dokumente verarbeiten.
Bei UTF-32 besteht jedes Zeichen aus 4 Byte, wobei es 4 verschiedene Reihenfolgen dieser Byte geben kann.
Nachfolgend werden zur Demonstration 4 Dokumente mit diesen Reihenfolgen angeboten.

1. Byte-Reihenfolge 1234

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=UTF-32

  1: FF FE 00 00<?xml version="1.0" encoding="UTF-32"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>UTF-32 (4321)</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

2. Byte-Reihenfolge 4321

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=UTF-32

  1: 00 00 FF FE<?xml version="1.0" encoding="UTF-32"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>UTF-32 (4321)</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

3. Byte-Reihenfolge 2143

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=UTF-32

  1: FE FF 00 00<?xml version="1.0" encoding="UTF-32"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>UTF-32 (3412)</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

4. Byte-Reihenfolge 3412
Ab hier folgen Beispiele mit Konflikte zwischen den möglichen Zeichensatzquellen.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: FF FE<?xml version="1.0" encoding="UTF-8"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>BOM != XML</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Die Zeichensatzkodierung des Byte Order Mark (in diesem Fall UTF-16) weicht von der Zeichensatzkodierung der XML-Deklaration ab (UTF-8).
Es muss die Zeichensatzkodierung aus dem Byte Order Mark verwendet werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: EF BB BF<?xml version="1.0" encoding="UTF-16"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>BOM != XML-AUTO</title>
  8:   </head>
  9:   <body />
 10: </html>

Dieses Dokument ist in UTF-16 kodiert, der Byte Order Mark "sagt" jedoch UTF-8.
Da dieses Dokument mit UTF-8 validiert werden muss, sollten diverse Fehlermeldungen erscheinen.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml

  1: <?xml version="1.0" encoding="UTF-8"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>XML != XML-Auto</title>
  8:   </head>
  9:   <body />
 10: </html>

Die Zeichensatzangabe der XML-Deklaration, dieses in UTF-16 kodierten Dokuments, behauptet das dieses in UTF-8 kodiert ist.
Da dieses Dokument mit UTF-16 validiert werden muss, sollten diverse Fehlermeldungen erscheinen.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=UTF-8

  1: <?xml version="1.0" encoding="ISO-8859-1"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>HTTP != XML</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Dieses Dokument ist in UTF-8 kodiert, die Zeichensatzkodierung aus dem HTTP-Header weicht jedoch von der Zeichensatzkodierung der XML-Deklaration ab.
Es muss UTF-8 verwendet werden und es sollte ein entsprechender Hinweis ausgegeben werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=ISO-8859-1

  1: <?xml version="1.0"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>HTTP != AUTO</title>
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Die im HTTP-Header übergebene Zeichensatzkodierung (ISO-8859-1) weicht von der tatsächlichen Kodierung (UTF-16) des Dokumentes ab.
Da ISO-8859-1 verwendet werden muss, sollten diverse Fehlermeldungen erscheinen.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: application/xhtml+xml; charset=ISO-8859-1

  1: EF BB BF<?xml version="1.0"?>
  2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3:      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4:  
  5: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
  6:   <head>
  7:     <title>HTTP != BOM</title>
  8:   </head>
  9:   <body />
 10: </html>

Während im HTTP-Header ISO-8859-1 als Zeichensatzkodierung angegeben wird, "sagt" der Byte Order Mark UTF-8.
Da ISO-8859-1 verwendet werden muss, sollten diverse Fehlermeldungen erscheinen.

nach oben   v3.0.0 - 16.11.2010 © validome.org - all rights reserved Datenschutzerklärung

Valid XHTML 1.0