<?php 
// AUTHORS should fill in these assignments:
$directory = 'questions/'; // the directory path below /International up to but not including the file name: must end in a slash! 
$filename = 'qa-html-encoding-declarations'; // the file name WITHOUT extensions
$authors = 'Richard Ishida, W3C'; // author(s) and affiliations
$modifiers = ''; // people making substantive changes, and their affiliation
$searchString = 'qa-html-encoding-declarations'; // blog search string - usually the filename without extensions
$firstPubDate = '2010-09-09  11:49'; // date of the first publication of the document (after review)
$lastSubstUpdate = '2010-09-09  11:49';  // date of latest substantive changes to this document
$pathtophp = '../php'; // authors should check that the following points to /International/php - must be relative path

// AUTHORS AND TRANSLATORS should fill in these assignments:
$clang = 'de'; // the language extension for articles in this language (use 'en' for English)
$isTranslation = 'yes';  // set to 'yes' if this is a translation !
$copyrightYear = '2010'; // this year, but may also be a range, eg. 2002-2006
$thisVersion = '2011-08-08 08:08'; // date of latest edits to this document/translation

// TRANSLATORS should fill in these assignments:
$translators = '<a href="http://bittersmann.de/">Gunnar Bittersmann</a>'; // translator(s) and their affiliation - a elements allowed, but use double quotes for attributes
$enVersion = '2010-09-09';  // date of the English original on which the translation is based (see last substantive change date at bottom of file)

include($pathtophp.'/bp3/boilerplate-'.$clang.'.php');

if (! isset($s_articles)) { $s_articles = "Articles"; }
$breadcrumbs = <<<eot
<a href='/International/'>$s_home </a> &gt; <a href='/International/resources'>$s_resources</a> &gt; <a href='/International/articlelist#characters'>$s_articles</a>
eot;

// create the table of contents as a nested list. Some standard text can be given as PHP variables. Delete, add or change links as necessary - this is set up for an faq.
$toc = <<<eot
<ol>
<li><a href="#question">$s_questionLink</a></li>
<li><a href="#background">$s_backgroundLink</a></li>
<li><a href="#answer">Kurze Antwort</a>
	<ol>
	<li><a href="#httpsummary">HTTP-Header</a></li>
	<li><a href="#quicklookup">Deklarationen innerhalb des Dokuments</a></li>
	<li><a href="#encodingnames">Bezeichnungen von Zeichencodierungen</a></li>
	<li><a href="#alternatives">Alternative Ansätze</a></li>
	</ol></li>
<li><a href="#detail">Weitere Details</a>
	<ol>
	<li><a href="#httpheadwhat">Der HTTP-Header</a></li>
	<li><a href="#html5charset">Das HTML5-meta-charset-Element</a></li>
	<li><a href="#metacontenttype">Das Content-Type-meta-Element</a></li>
	<li><a href="#xmldeclaration">Die XML-Deklaration</a></li>
	<li><a href="#utf16">Verwendung von UTF-16</a></li>
	<li><a href="#linkcharset">Das charset-Attribut für einen Link</a></li>
	<li><a href="#precedence">Prioritätsregeln</a></li>
	</ol></li>
<li><a href="#endlinks">$s_furtherReadingLink</a></li>
</ol>
eot;

// use the markup below if you need additional related links - you should only rarely need these
// otherwise delete the php
$additionalLinks = <<<eot
<h2><a id="links" name="links" tabindex="4">$s_relatedLinks</a></h2>
<p><a href="http://www.iana.org/assignments/character-sets">IANA-Bezeichnungen von Zeichencodierungen</a></p>
<p><a href="/International/questions/qa-css-charset">Angabe der Zeichencodierung in CSS</a></p>
eot;
include($pathtophp.'/bp3/structure.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html <?php echo "lang='$clang' xml:lang='$clang'";?> xmlns="http://www.w3.org/1999/xhtml">
<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Angabe der Zeichencodierung in HTML</title>
		<meta name="keywords"
		 content="i18n Internationalisierung Lokalisierung Übersetzung Zeichencodierung Zeichenkodierung unicode utf-8" />
		<meta name="description" content="Wie muss man die Zeichencodierung einer HTML-Datei angeben?" />
<?php echo $headincludes;?>

<link rel="stylesheet" href="/International/style/article-standards-v2.css" type="text/css" />
<style type="text/css">
#quick td { text-align: left; vertical-align: top; border:0; border-bottom: 1px solid #ccc; padding-right: 30px; }
#quick th { text-align: left; vertical-align: top; border:0; border-bottom: 1px solid #ccc; padding-right: 30px; }
#quick { margin-right: 32%; }
#quick p { margin-left: 0; margin-right: 0; }
q:lang(de)::before, q:lang(de)::after { content: none; }
</style>
</head>

	<body>
		<span id="version-info" style="display: none;"><!-- #BeginDate format:IS1m -->2011-01-10  12:43<!-- #EndDate --></span> <?php echo $topOfPage; ?>

		<h1>Angabe der Zeichencodierung in HTML</h1>

		<div class="section"><a id="contentstart" name="contentstart"></a> 
			<div id="audience"> 
				<p><?php echo $intendedAudience?>  XHTML/HTML-Autoren (die Web-Editoren/Texteditoren oder Scripte benutzen), Script-Entwickler (PHP, JSP u.a.), CSS-Entwickler, Webprojekt-Manager und alle, die sich eine Einführung wünschen, wie die Zeichencodierung einer (X)HTML- oder CSS-Datei anzugeben ist</p>
			<?php echo $updated; ?>
			</div>


			<h2><?php echo $questionHead?></h2>
			<div class="section2"> 
				<p class="question">Wie muss man die Zeichencodierung einer HTML-Datei angeben?</p>
			</div>
		</div>
		
	<!-- remove the following line if there is no background section -->
		<p class="background-link noprint"><?php echo $skiptoAnswer?></p>
	<div class="section"> 

			<h2><?php echo $backgroundHead?></h2>
		<!-- the text in the following sections illustrates some available features of the template -->
		<p>Man sollte immer die für ein HTML- oder XML-Dokument verwendete Zeichencodierung angeben. Andernfalls riskiert man, dass Zeichen im Inhalt nicht korrekt interpretiert werden. Das betrifft nicht nur die Lesbarkeit für Menschen, in zunehmendem Maße müssen auch Maschinen Ihre Daten verstehen können. Sie sollten auch überprüfen, dass Sie nicht an verschiedenen Stellen verschiedene Zeichencodierungen angeben.</p>
		<p>Dieser Artikel gibt einfache Ratschläge, wie man die benötigten Angaben erstellt. Er tut das auf zweierlei Art:</p>
		<ol>
		<li>Er gibt einfache Ratschläge für diejenigen, die schnell wissen möchten, was sie tun müssen.</li>
		<li>Er gibt weiterführende Informationen für diejenigen, die mehr über das Thema erfahren möchten oder alternative Ansätze untersuchen möchten. Es wird vorausgesetzt, dass Sie die kurze Antwort zuerst lesen.</li>
</ol>
			<p>Wenn Sie besser verstehen möchten, was Zeichen und Zeichencodierungen sind, lesen Sie den Artikel <a href="/International/questions/qa-what-is-encoding"><cite>Zeichencodierung für Anfänger</cite></a>. Für Informationen zur Angabe der Zeichencodierung für CSS-Stylesheets lesen Sie <a href="/International/questions/qa-css-charset"><cite>Angabe der Zeichencodierung in CSS</cite></a>.</p>
		</div>
	<div class="section"> 

		<h2><a id="answer" name="answer" href="#answer">Kurze Antwort</a></h2>
		<p>Es folgt eine kurze Zusammenfassung von Informationen für diejenigen, die schnell wissen möchten, was sie tun müssen, mit minimalen Erläuterungen. Folgen Sie diesen Schritten:</p>
		<ol>
			<li>Entscheiden Sie, ob Sie den <a href="#httpsummary">HTTP-Header</a> verwenden.</li>
			<li>Suchen Sie in der Tabelle unter <a href="#quicklookup">Deklarationen innerhalb des Dokuments</a> nach dem von Ihnen verwendeten Format.</li>
			<li>Informieren Sie sich über <a href="#encodingnames">Bezeichnungen von Zeichencodierungen</a>.</li>
		</ol>
		<p>Wenn Sie diese Zusammenfassung nicht verstehen oder wenn Sie die Gründe verstehen möchten, folgen Sie den Links zu nachfolgenden Abschnitten auf dieser Seite, wo Beispiele und Erklärungen gegeben werden.</p>
		<div class="section2">
			<h3><a id="httpsummary" name="httpsummary" href="#httpsummary">HTTP-Header</a></h3>
			<p>Sie sollten auf jeden Fall <a href="#httpheadwhat">HTTP-Header</a>-Angaben verwenden, wenn die Wahrscheinlichkeit besteht, dass Ihr Dokument umcodiert wird (d.h. dass die Zeichencodierung von  zwischengesschalteten Servern geändert wird), denn HTTP-Angaben haben höhere Priorität als Angaben im Dokument.</p>
			<p>Ansonsten sollten Sie HTTP-Header für alle Inhaltstypen verwenden, <a href="#httpheadwhat">für die das sinnvoll ist</a>, <strong>aber in Verbindung mit</strong> einer Angabe im Dokument (siehe unten). Stellen Sie immer sicher, dass die HTTP-Angaben mit den Angaben im Dokument übereinstimmen.</p>
			<p>Wenn Ihre Seite in UTF-16 codiert ist, geben Sie als Zeichencodierung nicht &quot;UTF-16BE&quot; oder &quot;UTF-16LE&quot; an, sondern verwenden Sie ausschließlich &quot;UTF-16&quot; und setzen Sie ein <a href="/International/questions/qa-byte-order-mark">BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</a> in ihre Datei.</p>
		</div>
		<div class="section2">
			<h3><a id="quicklookup" name="quicklookup" href="#quicklookup">Deklarationen innerhalb des Dokuments</a></h3>
			<p>Setzen Sie in den folgenden Beispielen die jeweilige Zeichencodierung anstelle von &quot;UTF-8&quot; ein, wenn nicht anders angegeben.</p>
			<table id="quick"><tbody>
			<tr>
			<th>Format</th>
			<th>Was Sie tun müssen</th>
			</tr>
			<tr>
			<td>HTML5</td>
			<td>
			<p>Verwenden Sie das <a href="#html5charset">meta-charset-Attribut</a> in einem meta-Element zu Beginn des <span class="kw">head</span>-Elements. Stellen Sie sicher, dass die gesamte Angabe innerhalb der ersten 512 Bytes des Seitenquelltexts Platz findet.</p>
			<p><code>&lt;meta charset=&quot;UTF-8&quot;&gt;</code></p>
</td>
			</tr>
			<tr>
				<td>HTML5 mit UTF-16</td>
				<td>
					<p>Stellen Sie sicher, dass ein <a href="/International/questions/qa-byte-order-mark">BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</a> am Anfang der Datei vorhanden ist. </p>
					<p>Die HTML-Arbeitsgruppe diskutiert gegenwärtig, ob man bei UTF-16 eine meta-Element-Angabe im <span class="kw">head</span>-Element verwenden kann. Zum jetzigen Zeitpunkt gilt: Verwenden Sie keine.</p>
				</td>
			</tr>
			<tr>
				<td>HTML4</td>
				<td>
					<p>Verwenden Sie eine <a href="#metacontenttype">Pragma-Direktive</a> zu Beginn des <span class="kw">head</span>-Elements.</p>
					<code>&lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;</code> </td>
			</tr>
			<tr>
				<td>XHTML 1.x ausgeliefert mit Medientyp text/html</td>
				<td>
					<p>Verwenden Sie UTF-8 als Zeichencodierung und verwenden Sie eine <a href="#metacontenttype">Pragma-Direktive</a> zu Beginn des <span class="kw">head</span>-Elements.</p>
					<p><code>&lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html;charset=UTF-8&quot; /&gt;</code> </p>
					<p>(Wenn sie ein andere Zeichencodierung verwenden möchten, lesen Sie die detaillierteren Informationen weiter unten.)</p>
				</td>
			</tr>
			<tr>
				<td>XHTML 1.x ausgeliefert als XML</td>
				<td>
					<p>Verwenden Sie die <span class="kw">encoding</span>-Angabe in der <a href="#xmldeclaration">XML-Deklaration</a> in der ersten Zeile des Seitenquelltexts. Stellen Sie sicher, dass nichts davor steht, auch keine Leerzeichen (ein <a href="/International/questions/qa-byte-order-mark">BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</a> ist aber OK).</p>
					<p><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</code></p>
				</td>
			</tr>
			</tbody>
			</table>
		</div>
		<div class="section2">
			<h3><a id="encodingnames" name="encodingnames" href="#encodingnames">Bezeichnungen von Zeichencodierungen</a></h3>
			<p>Bezeichnungen für Zeichencodierungen finden Sie im <a
					href="http://www.iana.org/assignments/character-sets">IANA-Register</a>. Verwenden Sie diese Bezeichnungen für alle hier angeführten Methoden zur Angabe der Zeichencodierung. Beachten Sie, dass sich diese, obwohl sie bei der IANA <dfn>charset</dfn> genannt werden, in Wirklichkeit auf Zeichencodierungen beziehen, nicht auf Zeichensätze.</p>
			<p>Das IANA-Register enthält oft mehrere Bezeichnungen für dieselbe Codierung. In diesen Fällen sollte die als <span class="qterm" lang="en" xml:lang="en">preferred</span> (bevorzugt) gekennzeichnete Bezeichnung verwendet werden.</p>
			<p>Es ist möglich, eigene Bezeichner für Zeichencodierungen mit vorangestelltem <code>x-</code> zu entwerfen, aber das ist gewöhnlich keine gute Idee, denn es schränkt die Interoperabilität ein. </p>
			<p>Beachten Sie den Bindestrich im Bezeichner UTF-8.</p>
		</div>
		<div class="section2">
			<h3><a id="alternatives" name="alternatives" href="#alternatives">Alternative Ansätze</a></h3>
			<p>Es gibt verschiedene Alternativen zu den oben empfohlenen Ansätzen; diese haben Vor- und Nachteile. Folgen Sie diesen Links für weitere Details:</p>
<ul>
<li>Verwendung der <a href="#metacontenttype">Pragma-Direktive</a> in HTML5 anstelle des meta-charset-Attributs</li>
<li>Verwendung des <a href="#html5charset">meta-charset-Attributs</a> in HTML4</li>
<li>Verwendung einer <a href="#xmldeclaration">XML-Deklaration</a> in als HTML ausgeliefertem XHTML 1.x</li>
</ul>
		</div>
	</div>
	<div class="section">
		<h2><a id="detail" name="detail" href="#detail">Weitere Details</a></h2>
		<p>Nun folgen detailliertere Informationen zu den verschiedenen Möglichkeiten, die Zeichencodierung anzugeben, beginnend mit HTTP-Headern, dann eine Auflistung der verschiedenen Ansätze zur Angabe innerhalb des Dokuments für nicht in UTF-16 codierte Seiten. Für UTF-16-codierte Seiten gibt es einen speziellen Unterabschnitt.</p>
		<p>Dieser Abschnitt beinhaltet:</p>
				<ul>
					<li><a href="#httpheadwhat">Der HTTP-Header</a></li>
					<li><a href="#metacontenttype">Die Pragma-Direktive</a></li>
					<li><a href="#xmldeclaration">Die XML-Deklaration</a></li>
					<li><a href="#html5charset">Das meta-charset-Attribut</a></li>
					<li><a href="#utf16">Verwendung von UTF-16</a></li>
					<li><a href="#linkcharset">Das charset-Attribut für einen Link</a></li>
					<li><a href="#precedence">Prioritätsregeln</a></li>
				</ul>

		<div class="section2">
			<h3><a id="httpheadwhat" name="httpheadwhat" href="#httpheadwhat">Der HTTP-Header</a></h3>
			<p>Die Content-Type-Information im HTTP-Header kann die Information über die Zeichencodierung des Dokuments enthalten.</p>
			<div class="example">
				<pre>HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
...
<span style="color: red;" title="Diese Zeile gibt die Zeichencodierung des Dokuments an.">Content-Type: text/html; charset=UTF-8</span>
Content-Language: de</pre>
			</div>
			<p>Die Zeichencodierung kann im HTTP-Header nicht nur für HTML-Dateien angegeben werden, sondern auch bspw. für CSS- und JavaScript-Dateien.</p>
			<p>Bei dynamisch per Script generierten Dokumenten kann man diese Informationen explizit zum HTTP-Header hinzufügen. In PHP bspw. verwenden Sie die <span class="kw">header()</span>-Funktion vor der Erzeugung von Inhalt, z.B.:</p>
			<div class="example">
				<blockquote>
					<p><code>&lt;?php header('Content-type: text/html; charset=utf-8'); ?&gt;</code><br />
					<code>&lt;!DOCTYPE html&gt;</code><br />
					<code>...</code></p>
				</blockquote>
			</div>
			<p>Bei statischen Dateien kann der Server diese Informationen mit den Dateitypen assoziieren. Wie der Server einzustellen ist, damit er die Zeichencodierung auf diese Weise angibt, ist von Server zu Server verschieden. Das sollte mit dem Server-Administrator geklärt werden.</p>
			<p>Apache-Server bspw. geben üblicherweise die voreingestellte Zeichencodierung an, die durch Nutzereinstellungen überschrieben werden kann. Ein Nutzer könnte bspw. folgende Zeile zu einer .htaccess-Datei hinzufügen, um alle Dateien mit der Endung .html in diesem und allen Unterverzeichnissen als UTF-8 auszuliefern:</p>
			<div class="example">
				<blockquote> <code>AddType 'text/html; charset=UTF-8' html</code> </blockquote>
			</div>
			<p>Für weitere Informationen zur Änderung der Zeichencodierung im HTTP-Header siehe <a href="/International/O-HTTP-charset"><cite>Einstellung des HTTP-charset-Parameters</cite>.</a></p>
			<p>Betrachten wir nun, ob es angebracht ist, die Zeichencodierung im HTTP-Header, innerhalb des Dokuments oder beides anzugeben.</p>
			<p><span class="leadin">Vorteile</span></p>
			<ul>
				<li>
					<p>Die Information im HTTP-Header hat die höchste Priorität, wenn sie sich von Angaben im Dokument unterscheidet. Zwischengeschaltete Server, die die Daten umcodieren (d.h. in eine andere Zeichencodierung konvertieren), nutzen dies aus, um die Zeichencodierung eines Dokuments zu ändern, bevor es an kleine Geräte ausgeliefert wird, die nur einige wenige Codierungen verstehen. Da die Information im HTTP-Header Vorrang gegenüber allen Angaben im Dokument hat, ändern Umcodierer typischerweise nicht die internen Angaben, sondern nur die Zeichencodierung und deren Angabe im HTTP-Header.</p>
				</li>
				<li>
					<p>Nutzerprogramme können die Zeichencodierungs&shy;information leicht finden, wenn sie im HTTP-Header gesendet wird.</p>
				</li>
			</ul>
			<p><span class="leadin">Nachteile</span></p>
			<ul>
				<li>
					<p>Für Inhaltsautoren kann es schwierig sein, die Zeichencodierungs&shy;information für statische Dateien auf dem Server zu ändern – besonders, wenn man es mit einem Provider zu tun hat.
						Sie benötigen Kenntnisse über und Zugang zu Servereinstellungen.</p>
				</li>
				<li>
					<p>Servereinstellungen können aus verschiedenen Gründen aus der Synchronisation mit dem Dokument geraten. Das kann bspw. geschehen, wenn man sich auf die Voreinstellung des Servers verlässt und sich diese ändert. Das ist eine sehr ungünstige Situation, denn die höhere Priorität der HTTP-Information gegenüber Angaben innerhalb des Dokuments kann das Dokument unlesbar machen.</p>
				</li>
				<li>
					<p>Es gibt potentielle Probleme bei statischen und dynamischen Dokumenten, wenn diese nicht von einem Webserver gelesen werden, sondern bspw. auf CD oder Harddisk gespeichert sind. In diesen Fällen gibt es gar keine Zeichencodierungs&shy;information aus einem HTTP-Header.</p>
					<p>Wenn die Zeichencodierung ausschließlich im HTTP-Header angegeben ist, steht diese Information auch nicht zur Verfügung, wenn Dateien editiert werden, wenn sie durch XSLT oder Scripte verarbeitet werden oder wenn sie zur Übersetzung geschickt werden usw.</p>
				</li>
			</ul>
			<p><span class="leadin">Sollte man diese Methode also verwenden?</span></p>
			<p>Wenn Dateien per HTTP von einem Server ausgeliefert werden, ist es kein Problem, die Information über die Zeichencodierung des Dokuments im HTTP-Header zu senden, solange diese Information korrekt ist.</p>
			<p>Wenn Sie denken, dass die Möglichkeit besteht, dass die Zeichencodierung der Datei zwischendurch geändert wird, bevor sie den Nutzer erreicht (z.B. dass sie in eine für Mobiltelefone verständliche Codierung umcodiert wird), dann sollten Sie die HTTP-Angabe verwenden, denn genau dort vollzieht sich die Änderung.</p>
			<p>Andererseits empfiehlt sich aufgrund der oben genannten Nachteile, die Zeichencodierungs&shy;information immer auch zusätzlich innerhalb des Dokuments anzugeben.</p>
			<p>(Manche vertreten die Auffassung, dass es kaum sinnvoll ist, die Zeichencodierung im HTTP-Header anzugeben, um sie innerhalb des Dokuments zu wiederholen. Sie schlagen daher vor, dass der HTTP-Header gar keine Angabe zur Zeichencodierung des Dokuments macht. Das bedeutet üblicherweise, Maßnahmen zu ergreifen, die Voreinstellungen des Servers zu <em>deaktivieren</em>.)</p>
		</div>
		<div class="section2">
			<h3><a id="html5charset" name="html5charset" href="#html5charset">Das meta-charset-Attribut</a>
			</h3>
			<p>Die HTML5-Spezifikation beschreibt eine neue Art, die Zeichencodierung eines Dokuments anzugeben. Dies wird auch schon von den gängigen Browsern unterstützt. Sie können dies für in HTML5 geschriebene Seiten verwenden. Alternativ können Sie auch die <a href="#metacontenttype">Pragma-Direktive</a> verwenden, aber nicht beides zusammen.</p>
			<p>Wenn Sie diese Angabe bei HTML4-Seiten verwenden, wird das der HTML4-Validator beanstanden (wenngleich der Browser die Information erkennen wird).</p>
			<p>Die Angabe sieht folgendermaßen aus:</p>
			<div class="example"> <code>&lt;meta charset=&quot;UTF-8&quot;&gt; </code> </div>
			<p>Die HTML5-Spezifikation verlangt, dass das gesamte meta-Element in den ersten 512 Bytes des Dokuments Platz findet. Fügen Sie dieses also immer zu Beginn des <span class="kw">head</span>-Elements ein.		</p>
			<p>Bei Verwendung von UTF-8 braucht man eigentlich keine explizite Angabe, es ist aber dennoch besser, eine zu machen, denn dann kann man die Zeichencodierung im Quelltext visuell erkennen. Es könnte auch die Unterstützung von älteren Browsern und Autorenwerkzeugen verbessern.</p>
			<p>Für UTF-16-codierte Seiten siehe <a href="#utf16">Verwendung von UTF-16</a>.</p>
		</div>
		<div class="section2">
			<h3><a id="metacontenttype" name="metacontenttype" href="#metacontenttype">Die Pragma-Direktive</a>
			</h3>
			<p>Das ist ein meta-Element, das so früh wie möglich zu Beginn des <span class="kw">head</span>-Elements stehen sollte und folgendermaßen aussieht:</p>
			<div class="sidenoteGroup">
				<div class="example"> <code>&lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;</code></div>
				<div class="sidenote">In XHTML-Syntax sollte natürlich &quot; /&gt;&quot; anstatt nur &quot;&gt;&quot; nach dem content-Attribut stehen.</div>
			</div>
			<p>Die Zeichencodierung des Dokuments ist hinter <span class="kw">charset=</span> angegeben. In diesem Fall wurde als Zeichencodierung die Unicode-Codierung UTF-8 angegeben.</p>
			<p>Die Pragma-Direktive sollte bei in HTML 4.01 geschriebenen Seiten verwendet werden. Sie sollte auch bei als HTML ausgelieferten XHTML-1.x-Dokumenten  verwendet werden, denn ein HTML-Parser holt sich keine Zeichencodierungs&shy;information aus der XML-Deklaration.</p>
			<p>Bei HTML5 können Sie die Zeichencodierung entweder auf diese Art angeben oder das neu spezifizierte <a href="#html5charset">meta-charset-Attribut</a> verwenden, aber nicht beides zusammen. Die Angabe der Zeichencodierung sollte in den ersten 512 Bytes des Dokuments Platz finden. Setzen Sie diese also gleich hinter das Start-Tag des <span class="kw">head</span>-Elements.</p>
			<p>Eine solche Angabe innerhalb des Dokuments ermöglicht es, dass das Dokument korrekt gelesen werden kann, wenn es nicht von einem Server kommt. Das betrifft nicht nur statische Dokumente, die von CD oder Harddisk gelesen werden, sondern auch dynamische Dokumente, die vom Nutzer gespeichert wurden.</p>
			<p>Eine Angabe innerhalb des Dokuments ist auch hilfreich für Entwickler, Tester oder Übersetzungs-Produktmanager, die die Zeichencodierung eines Dokuments visuell herausfinden möchten.</p>
			<p>Für UTF-16-codierte Seiten siehe <a href="#utf16">Verwendung von UTF-16</a>.</p>
		</div>
		<div class="section2">
			<h3><a id="xmldeclaration" name="xmldeclaration" href="#xmldeclaration">Die XML-Deklaration</a></h3>
			<p>Die XML-Deklaration ist durch den XML-Standard definiert. Sie tritt am Anfang einer XML-Datei auf und ermöglicht eine <span
					class="kw">encoding</span>-Angabe. Zum Beispiel:</p>
			<div class="example"> <code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</code> </div>
			<p>Eine XML-Deklaration ist für als XML verarbeitete Dokumente erforderlich, wenn die Zeichencodierung des Dokuments nicht UTF-8 oder UTF-16 ist und wenn die Zeichencodierung nicht durch ein Protokoll höherer Ebene (HTTP-Header) angegeben worden ist.</p>
			<p>Das ist bedeutsam, denn wenn Sie die XML-Deklaration weglassen möchten, müssen Sie entweder UTF-8 oder UTF-16 als Zeichencodierung für die Seite wählen, wenn diese ohne HTTP verwendet werden soll.</p>
			<p>Sie sollten eine XML-Deklaration zur Angabe der Zeichencodierung von als XML ausgelieferten XHTML-1.x-Dokumenten verwenden.</p>
			<p>Es kann hilfreich sein, eine XML-Deklaration für als XML ausgelieferte Webseiten zu verwenden, selbst wenn die Zeichencodierung UTF-8 oder UTF-16 ist, denn eine solche Angabe innerhalb des Dokuments ist auch hilfreich für Entwickler, Tester oder Übersetzungs-Produktmanager, die die Zeichencodierung eines Dokuments visuell herausfinden möchten.</p>
			<div class="sidenoteGroup">
				<p><span class="leadin">Verwendung der XML-Deklaration bei als HTML ausgeliefertem XHTML:</span> Als HTML ausgeliefertes XHTML wird als HTML geparst, obwohl es auf XML-Syntax basiert, und deshalb sollte eine XML-Deklaration vom Browser nicht beachtet werden. Aus diesem Grund sollten Sie eine <a href="#metacontenttype">Pragma-Direktive</a> zur Angabe der Zeichencodierung verwenden, wenn Sie XHTML als HTML ausliefern.*</p>
				<div class="sidenote">
					<p>* Andersherum wird die Pragma-Direktive, obwohl valide, von XML-Parsern nicht als Zeichencodierungs&shy;angabe anerkannt.</p>
				</div>
			</div>
			<p>Andererseits könnte die Datei auch irgendwann als Eingabe für andere Prozesse dienen, die XML-Parser verwenden. Dazu gehören XML-Editoren, XSLT-Transformationen, AJAX usw. Außerdem wird mitunter serverseitige Logik eingesetzt um zu entscheiden, ob die Datei als HTML oder als XML ausgeliefert werden soll. Aus diesen Gründen sollten Sie, wenn Sie nicht UTF-8 oder UTF-16 verwenden, eine XML-Deklaration am Anfang des Markups einfügen, auch wenn die Datei als HTML zum Browser gesendet wird. Der Anfang einer Datei sieht dann folgendermaßen aus:</p>
			<div class="example"> <code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;<br />
				&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
				&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br />
				&lt;html xmlns=&quot;http&lrm;://www.w3.org/1999/xhtml&quot; xml:lang=&quot;de&quot; lang=&quot;de&quot;&gt;<br />
				&lt;head&gt;<br />
				&lt;meta http-equiv=&quot;Content-type&quot; content=&quot;text/html;charset=ISO-8859-1&quot;&nbsp;/&gt;<br />
				...</code> </div>
			<p>Wenn Sie UTF-8 oder UTF-16 verwenden, wird keine XML-Deklaration benötigt, zumal das <span class="kw">meta</span>-Element die visuelle Erkennung der Zeichencodierung für Menschen ermöglicht.</p>
			<p><span class="leadin">Rücksicht auf ältere Browser:</span> Wenn irgendetwas vor der DOCTYPE-Angabe steht, wird die Seite im Internet Explorer 6 im <a href="/International/articles/serving-xhtml/#quirks">Quirksmodus</a> gerendert. Wenn Sie UTF-8 oder UTF-16 verwenden, können Sie die XML-Deklaration weglassen und haben keine Probleme.</p>
			<p>Wenn Sie allerdings eine andere Zeichencodierung verwenden und die Nutzer des Internet Explorer 6 noch einen signifikanten Anteil Ihrer Leser ausmachen und wenn Ihr Dokument Konstrukte enthält, auf die sich der Unterschied zwischen <a href="/International/articles/serving-xhtml/#quirks">Standardmodus</a> und Quirksmodus auswirkt, dann könnten Sie ein Problem haben. Wenn Sie sicherstellen möchten, dass Ihre Seiten in allen standardkonformen Browsern gleich gerendert werden, müssen Sie Workarounds zu Ihrem CSS hinzufügen, um die Unterschiede auszugleichen.</p>
			<p>Es könnten noch andere Darstellungsprobleme in Verbindung mit der XML-Deklaration auftreten, diese stellen allerdings nur bei sehr viel älteren Browsern ein Problem dar. Die XHTML-Spezifikation <a href="http://edition-w3c.de/TR/2002/REC-xhtml1-20020801/#_Toc6101549">warnt</a>, „<q>dass Verarbeitungsanweisungen auf einigen Benutzerprogrammen dargestellt werden. Außerdem interpretieren einige Benutzerprogramme die XML-Deklaration so, als ob sie unbekanntes XML statt HTML vor sich hätten; und folglich stellen sie das Dokument nicht wie erwartet dar.</q>“ Sie sollten auf entsprechenden Nutzerprogrammen <a href="http://www.w3.org/International/tests/tests-html-css/list-encoding-html-css">testen</a>, um zu entscheiden, <a href="http://www.webstandards.org/learn/articles/prolog_problems/">ob das für Sie ein Problem ist</a>.</p>
			<p>Natürlich können Sie wie oben erwähnt die XML-Deklaration weglassen, wenn Sie UTF-8 oder UTF-16 verwenden. Die Datei kann dann immer noch als XML oder HTML verarbeitet werden. Das ist vermutlich die einfachste Lösung.</p>
		</div>
		<div class="section2">
			<h3><a id="utf16" name="utf16" href="#utf16">Verwendung von UTF-16</a></h3>
			<p>Nach einer Untersuchung von Google über mehreren Milliarden Webseiten sind weniger als 0,01% aller Seiten im Web in UTF-16 codiert. In den meisten Fällen wählt man besser UTF-8 als Zeichencodierung (was gemäß dieser Untersuchung mehr als 50% aller Webseiten tun). Ein Grund dafür ist, dass es spezielle Regeln zur Angabe der Zeichencodierung einer UTF-16-Seite gibt.</p>
			<p>In diesem Artikel wird allgemein empfohlen, die Zeichencodierung innerhalb des Dokuments anzugeben, selbst wenn sie auch im HTTP-Header angegeben ist. Die HTML5-Spezifikation verbietet allerdings gegenwärtig die Verwendung des meta-charset-Attributs oder der Pragma-Direktive zur Angabe von UTF-16. Es ist eine Diskussion im Gang, ob das so sein muss; das kann sich noch ändern. Gegenwärtig sollte man, wenn valider HTML5-Code gewünscht ist, diese Angaben nicht für UTF-16-codierte Inhalte verwenden.</p>
			<p>Ob Sie Element-basierte Angaben verwenden oder nicht, Sie sollten sicherstellen, dass Sie immer ein <a href="/International/questions/qa-byte-order-mark" class="dfn">BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</a> ganz am Anfang einer UTF-16-codierten Datei zu stehen haben. Im Effekt ist dies die Angabe innerhalb des Dokuments.</p>
			<p>Geben Sie für UTF-16-codierte Seiten nicht &quot;UTF-16BE&quot; oder &quot;UTF-16LE&quot; an, sondern verwenden Sie ausschließlich &quot;UTF-16&quot;. Das BOM am Dateianfang zeigt an, ob das Codierungsschema <span class="qterm" lang="en" xml:lang="en">little-endian</span> oder <span class="qterm" lang="en" xml:lang="en">big-endian</span> ist. (Der Grund dafür ist, dass als UTF-16BE oder UTF-16LE gekennzeichneter Inhalt kein BOM haben darf; HTML5 für UTF-16-codierte Seiten aber ein BOM verlangt.)</p>
		</div>
		<div class="section2">
			<h3><a id="linkcharset" name="linkcharset" href="#linkcharset">Das charset-Attribut für einen Link</a></h3>
			<p>Die HTML-4.01-Spezifikation beschreibt ein <span class="kw">charset</span>-Attribut, das für <span class="kw">a</span>-, <span class="kw">link</span>- und <span class="kw">script</span>-Elemente verwendet werden kann und die Zeichencodierung des verlinkten Dokuments angeben soll.</p>
			<p>Bei einem Link kann es folgendermaßen verwendet werden:</p>
			<div class="example"> <code>Siehe &lt;a href=&quot;/mysite/mydoc.html&quot; charset=&quot;ISO-8859-1&quot;&gt;Liste unserer Publikationen&lt;/a&gt;.</code> </div>
			<p>Man könnte es auch verwenden, um die Zeichencodierung eines CSS-Stylesheets anzugeben:</p>
			<div class="example"> <code>&lt;link rel=&quot;stylesheet&quot; charset=&quot;Windows-1251&quot; href=&quot;mystyles.css&quot; type=&quot;text/css&quot;&gt; </code></div>
			<p>Die Idee ist, dass der Browser die richtige Zeichencodierung auf das empfangene Dokument anwenden kann, wenn nicht auf eine andere Art die Zeichencodierung für das Dokument angegeben wurde.</p>
			<p>Die Verwendung dieses Attributs für <span class="kw">a</span>- und <span class="kw">link</span>-Elemente ist gegenwärtig von der HTML5-Spezifikation missbilligt. Sie sollten es bei diesen Elementen nicht einsetzen.</p>
			<p>Es gibt auch einige Dinge zu bedenken, bevor man dieses Attribut verwendet. Erstens wird es von gängigen Browsern nicht gut unterstützt. Zweitens können Sie kaum sicherstellen, dass die Information stets korrekt ist. Der Autor des verlinkten Dokuments könnte die Zeichencodierung des Dokuments ändern, ohne dass Sie dies erfahren. Wenn der Autor dann immer noch nicht die Zeichencodierung seines Dokuments angibt, weisen Sie den Browser an, eine falsche Zeichencodierung anzuwenden. Und drittens ist dieses Attribut überhaupt nicht nötig, wenn die Ratschläge in diesem Tutorial befolgt werden und Dokumente entsprechend gekennzeichnet sind. Das ist die weitaus bessere Verfahrensweise.</p>
			<p>Diese Art der Angabe der Zeichencodierung eines Dokuments hat die niedrigste Priorität (d.h. sie wird ignoriert, wenn die Zeichencodierung auf andere Art angegeben ist). Das bedeutet, dass man dies sowieso nicht dazu verwenden kann, falsche Angaben zu korrigieren.		</p>
		</div>
		<div class="section2">
			<h3><a id="precedence" name="precedence" href="#precedence">Prioritätsregeln</a></h3>
			<p>Wenn sich mehrere Zeichencodierungs&shy;angaben widersprechen, entscheiden die Prioritätsregeln, welche angewandt wird. In XHTML und HTML ist die Priorität wie folgt, mit 1 als höchster:</p>
			<ol>
				<li>BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</li>
				<li>HTTP-Content-Type-Header</li>
				<li>XML-Deklaration</li>
				<li>meta-Element</li>
				<li>link-charset-Attribut</li>
			</ol>
			<p>Die hohe Priorität des HTTP-Headers ist wie bereits gesagt von Vorteil, wenn die Zeichencodierung des Dokuments durch einen zwischengeschalteten Server geändert wird, denn bei einer derartigen Umcodierung werden wahrscheinlich keine Angaben innerhalb des Dokuments geändert. Der umcodierende Server sollte allerdings die neue Zeichencodierung im HTTP-Header angeben.</p>
			<p>Die HTML5-Spezifikation  (die noch nicht endgültig ist) beschreibt formal die Priorität des <a href="/International/questions/qa-byte-order-mark" class="dfn">BOM (<span lang="en" xml:lang="en">byte-order mark</span>)</a>. Gemäß dieser Spezifikation hat das BOM eine höhere Priorität als der HTTP-Content-Type-Header und als alles andere. Zum Zeitpunkt dieses Artikels war dies in den aktuellen Versionen der gängigen Browser noch nicht einheitlich implementiert. Für weitere Informationen siehe diese <a href="http://www.w3.org/International/tests/tests-html-css/tests-character-encoding/results-html-encoding-basic">Testergebnisse</a>.</p>
		</div>
	</div>
	<?php echo $survey;?>
	<div class="section noprint">
		<h2><?php echo $readingHead?></h2>
		<ul id="full-links">
			<li>
				<p>Erste Schritte: <a href="/International/getting-started/characters"><cite>Einführung in Zeichensätze und Zeichencodierungen</cite></a> <span class="uri">http://www.w3.org/International/getting-started/characters</span></p>
			</li>
			<li>
				<p>Tutorial: <a href="/International/tutorials/tutorial-char-enc/"><cite>Umgang mit Zeichensätzen und Zeichencodierungen in  HTML und CSS</cite></a> <span class="uri">http://www.w3.org/International/tutorials/tutorial-char-enc/</span></p>
			</li>
			<li>
				<p><a href="http://www.iana.org/assignments/character-sets"><cite>IANA-Bezeichnungen von Zeichencodierungen</cite></a> <span class="uri">http://www.iana.org/assignments/character-sets</span></p>
			</li>
			<li>
				<p><a href="/International/questions/qa-css-charset"><cite>Angabe der Zeichencodierung in CSS</cite></a> <span class="uri">http://www.w3.org/International/questions/qa-css-charset</span></p>
			</li>
			<li>
				<p>Verwandte Links: <cite>HTML und CSS verfassen</cite> – <a href="/International/techniques/authoring-html#charset">Zeichen</a> <span class="uri">http://www.w3.org/International/techniques/authoring-html#charset</span> – <a href="/International/techniques/authoring-html#indoc">Angabe der Zeichencodierung in HTML</a> <span class="uri">http://www.w3.org/International/techniques/authoring-html#indoc</span></p>
			</li>
			<li>
				<p>Verwandte Links: <cite>Server-Konfiguration</cite>  – <a href="/International/techniques/server-setup#charset">Zeichen</a> <span class="uri">http://www.w3.org/International/techniques/server-setup#charset</span></p>
			</li>
		</ul>
	</div>
	<?php echo $bottomOfPage; ?>

	</body>
</html>


