Ustawianie parametru charset HTTP

Kiedy serwer wysyła dokument do oprogramowania użytkownika (np.: do przeglądarki) wysyła również informacje w polu typu treści (Content-Type) towarzyszącemu nagłówkowi HTTP na temat typu formatu danych. Informacja ta jest wyrażona przy użyciu etykiety MIME type. Artykuł ten jest punktem początkowym dla tych, którzy chcą ustawić informacje dotyczące kodowania w nagłówku HTTP.

Informacje dotyczące deklarowania kodowania znaków na stronach HTML lub sprawdzania informacji dotyczących kodowania wysyłanych w nagłówkach HTTP są dostępne w innych dokumentach.

Parametr charset

Dokumenty typu tekst transmitowane przez HTTP np: text/html, text/plain, etc., mogą wysyłać parametr charset w nagłówku HTTP określając kodowanie znaków dokumentu..

Jest bardzo ważnym aby wyraźnie określić dokument internetowy. HTTP 1.1 mówi, że domyślnym charset jest ISO-8859-1. Istnieje niestety zbyt wiele nieokreślonych dokumentów pod względem kodowania, dlatego przeglądarki używają kodowanie preferowane przez czytelnika jeśli nie istnieje wyraźnie sprecyzowany parametr charset dokumentu.

Typowa linia kodu w nagłówku HTTP wygląda w następujący sposób:

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

W teorii każde kodowanie, które jest zarejestrowane w IANA może być użyte, ale nie ma przeglądarki, która by je wszystkie rozumiała. Czym szerzej kodowanie jest używane, tym większe prawdopodobieństwo, że przeglądarki będą je rozumieć. Kodowanie Unicode takie jak UTF-8 jest dobrym wyborem z wielu powodów.

Ustawianie serwera

Jak ustawić serwer aby wysyłał właściwe informacje dotyczące charset zależy od serwera. Aby wprowadzić zmiany w ustawieniach serwera potrzebne są uprawnienia administracyjne.

Apache. Można to zrobić poprzez AddCharset (Apache 1.3.10 i nowszy) lub dyrektywy AddType dla folderów i plików. W AddDefaultCharset (Apache 1.3.12 i nowszy) możliwym jest ustawienie domyślnego charset dla całego serwera. Więcej informacji można zaczerpnąć w artykule na temat Ustawiania informacji dotyczących 'charset' w .htaccess.

Jigsaw. Używa się indexer w JigAdmin do powiązania rozszerzeń z charsets lub ustawia się charset bezpośrednio na źródle.

IIS 5 and 6. W Menadżer Usług Internetowych, nacisnąć prawym przyciskiem na "Domyślna Witryna" (lub na witrynę, którą chce się skonfigurować) i przejść do "Właściwości" => "Nagłówki HTTP" => "Typy Plików..." => "Nowy Typ...". Wstawić rozszerzenie, które chce się mapować, oddzielnie dla każdego rozszerzenia; użytkownicy IIS będą najprawdopodobniej chcieli mapować .htm, .html,... Następnie, dla Content type, dodać "text/html;charset=utf-8" (bez cytatów; zastąpić utf-8 pożądanym kodowaniem; nie wolno zostawiać żadnych spacji, ponieważ IIS ignoruje tekst po spacjach). W IIS 4 trzeba będzie użyć "Nagłówki HTTP" => "Tworzenie Własnego Nagłówka HTTP", jeśli powyższa procedura nie działa.

Skryptowanie nagłówka

Nagłówek może być również ustawiony po stronie serwera w językach skryptu. Na przykład:

Perl. Wyjść właściwym nagłówkiem przed jakąkolwiek częścią strony. Po ostatnim nagłówku użyć podwójny linebreak, np.:
print "Content-Type: text/html; charset=utf-8\n\n";

Python. Zastosować takie samo rozwiązanie jak w przypadku Perl z tym wyjątkiem, że nie trzeba umieszczać średnika na końcu).

PHP. Użyć funkcji header() zanim wygeneruje się treść, np.:
header('Content-type: text/html; charset=utf-8');

Java Servlets. Użyć metody setContentType na ServletResponse przed obiektem (Stream or Writer) wyjścia, np.:
resource.setContentType ("text/html;charset=utf-8");
Jeśli używa się Writer, Servlet automatycznie zajmuje się konwersją Java Strings na wybrane kodowanie.

JSP. Użyć dyrektywy page, np.:
<%@ page contentType="text/html; charset=UTF-8" %>
Wyjście z out.println() lub elementów wyrażenia (<%= object%>) są automatycznie konwertowane na wybrane kodowanie. Również sama strona jest interpretowana jako zakodowana w ten sposób.

ASP i ASP.Net. ContentType i charset są ustawiane niezależnie oraz są metodami na obiekcie Response. Aby ustawić charset, zastosuj np.:
<%Response.charset="utf-8"%>
W ASP.Net, ustawienie Response.ContentEncoding zajmie się zarówno parametrem charset w typie treści HTTP jak również kodowaniem wysłanych dokumentów (które są tez tak zakodowane). Domyślne ustawienie można określić w elemencie globalization w Web.config (lub Machine.config, który jest początkowo ustawiony na UTF-8).