Att sätta charset-parametern i HTTP

När en server sänder ett dokument till en webbklient (t.ex. en webbläsare) så skickar den även information, i Content-Type-fältet i ett HTTP-huvud, om vilken typ av dataformat som används. Denna information anges som en MIME-typ-etikett. Denna artikel ger översiktlig information som kan användas av de som behöver ange kodningsinformation i ett HTTP-huvud.

Du bör titta på andra dokument om hur man deklarerar teckenkodning i HTML-sidor, eller hur man tar reda på hur man kan inspektera information om teckenkodning som sänds i ett HTTP-huvud.

charset-parametern

Dokument som sänds med HTTP och är av typ text, såsom text/html, text/plain, etc., kan levereras med en charset-parameter i ett HTTP-huvud som specificerar dokumentets teckenkodning.

Det är mycket viktigt att webbdokument etiketteras explicit. Specifikationen för HTTP 1.1 säger att standardvärdet för charset är ISO-8859-1. Men det finns alltför många dokument utan etikett, men som har annan kodning, vilket medför att webbläsaren utnyttjar den kodning som användaren har angett, i de fall att dokumentet inte har en explicit angiven charset-parameter.

Den relevanta raden i HTTP-huvudet ser typiskt ut som följer:

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

I teorin kan man använda vilken som helst kodning som har registrerats hos IANA, men det finns ingen webbläsare som kan hantera alla dessa. Ju mer använd en kodning är, desto bättre chans att webbläsaren kan hantera den. En Unicode-kodning som UTF-8 är ett bra val, av många skäl.

Att sätta upp en server

Hur man får servern att skicka ut lämplig information om charset beror på vilken server det är. Du behöver ha lämpliga administratörsrättigheter för att kunna ända serverns inställningar.

Apache. Detta kan göras genom att använda direktivet AddCharset (Apache 1.3.10 och senare) eller AddType, för mappar eller individuella resurser (filer). Med AddDefaultCharset (Apache 1.3.12 och senare), kan man sätta ett standardvärde för charset, som gäller för hela servern. Mer information om detta finns i artikeln Att ange 'charset'-information i .htaccess.

Jigsaw. Använd en indexer i JigAdmin för att knyta filnamnssuffix till charsets, eller ange charset direkt för en resurs.

IIS 5 och 6. I Internet Services Manager ska du högerklicka på "Default Web Site" (eller den webbplats du vill konfigurera) och gå till "Properties" => "HTTP Headers" => "File Types..." => "New Type...". Ange det filnamnssuffix du vill knyta information till, separat för varje suffix; IIS-användare vill troligen ange detta för .htm, .html,... För Content type ska du sedan lägga till "text/html;charset=utf-8" (utan citationstecken; ersätt "utf-8" med den charset som du vill ha; skriv inte in några blanktecken eftersom IIS ignorerar all text efter blanktecken). För IIS 4 kanske du måste använda "HTTP Headers" => "Creating a Custom HTTP Header" om det som beskrevs ovan inte fungerar.

Att ange huvud med skript

Ett lämpligt HTTP-huvud kan även skapas med hjälp av skripts på servern. Till exempel:

Perl. Skriv ut ett korrekt HTTP-huvud innan någon del av sidans innehåll skrivs ut. Efter det sista HTTP-huvudet så ska två radslut skrivas ut, t.ex. som:
print "Content-Type: text/html; charset=utf-8\n\n";

Python. Använd samma lösning som för Perl (förutom att du inte behöver ange semikolon i slutet av kodraden).

PHP. Använd funktionen header() innan något sidinnehåll genereras, t.ex. som:
header('Content-type: text/html; charset=utf-8');

Java Servlets. Använd metoden setContentTypeServletResponse innan du skapar något objekt (Stream eller Writer) som ska användas vid utskrift, t.ex. som:
resource.setContentType ("text/html;charset=utf-8");
Om du använder objekt av typ Writer så kommer objektet Servlet automatiskt att ta hand om konvertering av Java Strings till den valda kodningen.

JSP. Använd direktivet page, t.ex. som:
<%@ page contentType="text/html; charset=UTF-8" %>
Det som skriv ut från out.println() eller från uttryckselement (<%= object%>) blir automatiskt konverterat till den valda kodningen. Dessutom kommer sidan själv att tolkas som om den är i denna kodning.

ASP och ASP.Net. ContentType och charset sätts oberoende av varandra, och är metoder i svarsobjektet. För att sätta charset, använd t.ex.:
<%Response.charset="utf-8"%>
I ASP.Net, om man sätter Response.ContentEncoding så sätts såväl charset-parametern för Content-Type i HTTP, som den konkreta kodningen av dokumentet som sänds ut (som naturligtvis skall vara identiska). Standardvärde kan sättas i elementet globalization i Web.config (eller Machine.config, som initialiserats till UTF-8).