Einstellung des HTTP-charset-Parameters

Wenn ein Server ein Dokument an einen Browser sendet, dann sendet er im Content-Type-Feld des zugehörigen HTTP-Headers auch Informationen über die Art des Datenformats mit. Diese Information wird im Medientypen (MIME-Typen) angegeben. Dieser Artikel dient als Ausgangspunkt für alle, die die Zeichencodierungsangabe im HTTP-Header ändern möchten.

Sie sollten sich auch informieren, wie man die Zeichencodierung in HTML-Seiten angibt und wie man die im HTTP-Header gesendete Zeichencodierungsangabe prüft.

Der charset-Parameter

Dokumente vom Typ text, wie text/html, text/plain usw., können bei der Übertragung per HTTP einen charset-Parameter im HTTP-Header senden, um die Zeichencodierung des Dokuments anzugeben.

Es ist sehr wichtig, Web-Dokumente immer explizit zu kennzeichnen. HTTP/1.1 legt den Standardwert für charset mit ISO-8859-1 fest. Es gibt aber unzählige ungekennzeichnete Dokumente in anderen Zeichencodierungen, weshalb Browser die vom Nutzer bevorzugte Zeichencodierung verwenden, wenn nicht explizit ein charset-Parameter angegeben ist.

Die Zeile im HTTP-Header sieht üblicherweise so aus:

Content-Type: text/html; charset=utf-8

In der Theorie kann jede bei der IANA registrierte Zeichencodierung verwendet werden, aber kein Browser versteht sie alle. Je weiter eine Zeichencodierung verbreitet ist, desto größer die Chance, dass ein Browser sie verstehen wird. Eine Unicode-Codierung wie UTF-8 ist eine gute Wahl – aus mehreren Gründen.

Server-Konfiguration

Wie man den Server konfiguriert, dass er die richtige charset-Information sendet, hängt vom Server ab. Man benötigt die notwendigen Zugangsrechte, um Servereinstellungen ändern zu können.

Apache: Man erreicht es mit den Direktiven AddCharset (ab Version 1.3.10) oder AddType; für Verzeichnisse oder einzelne Ressourcen (Dateien). Mit AddDefaultCharset (ab Version 1.3.12) ist es möglich, die Standard-Zeichencodierung für den gesamten Server einzustellen. Weitere Informationen dazu finden Sie im Artikel Einstellung der Zeichencodierungsangabe ('charset') in .htaccess.

Jigsaw: Verwenden Sie einen Indexer in JigAdmin, um Dateiendungen mit Zeichencodierungen zu verknüpfen, oder setzen Sie charset direkt für eine Ressource.

IIS 5 und 6: Klicken Sie im IIS-Manager mit der rechten Maustaste auf "Standardwebsite" (oder die Website, die Sie konfigurieren möchten) und gehen Sie zu "Eigenschaften" > "HTTP-Header" > "MIME-Zuordnungen" > "Dateitypen…" > "Neuer Typ…". Geben Sie die Dateiendung ein, die sie verknüpfen möchten, separat für jede Endung. IIS-Anwender werden sicherlich .htm, .html, … verknüpfen wollen. Dann fügen Sie für Content type "text/html;charset=utf-8" ein (ohne die Anführungszeichen; ersetzen Sie utf-8 durch Ihre gewünschte Zeichencodierung; setzen Sie keine Leerzeichen, denn IIS ignoriert jeden Text nach Leerzeichen). Bei IIS 4 verwenden Sie "HTTP-Header" > "Benutzerdefinierte HTTP-Header", wenn das zuvor Gesagte nicht funktioniert.

Generierung des Headers per Script

Der entsprechende Header kann auch durch serverseitige Scriptsprachen gesetzt werden. Zum Beispiel:

Perl: Lassen Sie den korrekten Header vor allen Teilen der jeweiligen Webseite ausgeben. Setzen Sie nach dem letzten Header einen doppelten Zeilenubruch, z.B.:
print "Content-Type: text/html; charset=utf-8\n\n";

Python: Verwenden Sie dieselbe Lösung wie für Perl (ein Semikolon am Ende ist hier allerdings nicht erforderlich).

PHP: Verwenden Sie die header()-Funktion, bevor sie Inhalte generieren, z.B.:
header('Content-type: text/html; charset=utf-8');

Java Servlets: Verwenden Sie die setContentType-Methode von ServletResponse vor dem Ausgabe-Objekt (Stream oder Writer), z.B.:
resource.setContentType ("text/html;charset=utf-8");
Wenn Sie Writer verwenden, übernimmt das Servlet automatisch die Konvertierung von Java-Strings in die gewählte Zeichencodierung.

JSP: Verwenden Sie die page-Direktive z.B.:
<%@ page contentType="text/html; charset=UTF-8" %>
Ausgaben von out.println() oder Ausdrücken (<%= object%>) werden automatisch in die gewählte Zeichencodierung konvertiert. Die Seite selbst wird auch in dieser Codierung interpretiert.

ASP und ASP.Net: ContentType und charset werden unabhängig voneinander gesetzt; es sind Eigenschaften des Response-Objekts. Um bspw. charset zu setzen, geben Sie an:
<%Response.charset="utf-8"%>
In ASP.Net wird mit dem Setzen von Response.ContentEncoding beides erledigt: der charset-Parameter in HTTP-Content-Type und die Zeichencodierung, mit der das Dokument ausgeliefert wird (beides muss natürlich übereinstimmen). Der Standardwert kann im globalization-Element in Web.config gesetzt werden (oder in Machine.config, wo er ursprünglich auf UTF-8 gesetzt ist).