Förstå hur IIS bearbetar ASP-kodning
Som med alla kodningsproblem i Classic ASP hjälper det att förstå vilket syfte de olika kommandona uppfyller (eftersom folk alltför ofta använder dem felaktigt, eftersom det verkar lösa problemet) .
<%@ Language = "VBScript" CodePage = 65001 %>
Denna rad missförstås ofta, syntaxen <%@
är ett "ASP @ Processing Directive" och tjänar till att berätta för IIS hur man bearbetar ASP-sidan och är förmodligen ett av de viktigaste kommandona när det gäller att arbeta med korrekt kodning.
-
@Language
talar om för IIS vilket registrerat Active Scripting Language som ska användas för att bearbeta ASP-sidan. -
@CodePage
talar om för IIS vilken CodePage som ska användas för att bearbeta ASP-sidan. Om sidan har sparats medUTF-8
då måste IIS veta när sidan bearbetas ska den använda CodePage65001
(annan känd somUTF-8
) .
Det betyder att @CodePage
ska alltid matcha den fysiska kodning som användes när sidan skapades. Du kan behöva använda en avancerad textredigerare för att lösa detta, några exempel är Anteckningar++
(visar kodning i statusfältet längst ner till höger i GUI-fönstret) och Visual Studio
(Har ett dolt menykommando som heter Advanced Save Options
som kan nås genom att anpassa menyraden) .
<% Response.CodePage = 65001 %>
Återigen, ofta missförstådd, är syftet med detta kommando att tala om för IIS hur dynamiska strängar ska kodas (med dynamiska strängar menar vi allt som matas ut med Response.Write()
) . Möjligen den viktigaste delen av hela processen, om den är felaktigt inställd eller om det antas att kodningsfel överensstämmer kan och förekommer.
<% Response.CharSet = "UTF-8" %>
Detta kommando ställer in ;charset=utf-8
i Content-Type
HTTP-rubrik när svaret skickas från servern till klientwebbläsaren talar om för webbläsaren att detta svar ska behandlas som UTF-8
snarare än standardkoden. Betyder kod som
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
är överflödig och bör inte användas. Det är också värt att notera att det finns ett kommando för Content-Type
HTTP-huvud också
Response.ContentType = "text/html"
vilket gör den ännu mer överflödig än den redan var.