Verstehen, wie IIS die ASP-Codierung verarbeitet
Wie bei allen Codierungsproblemen in Classic ASP hilft es zu verstehen, welchen Zweck die verschiedenen Befehle erfüllen (da sie zu oft falsch verwendet werden, weil es das Problem zu lösen scheint) .
<%@ Language = "VBScript" CodePage = 65001 %>
Diese Zeile wird häufig missverstanden, die Syntax <%@
ist ein "ASP @ Processing Directive" und dient dazu, IIS mitzuteilen, wie die ASP-Seite verarbeitet werden soll, und ist wahrscheinlich einer der wichtigsten Befehle, wenn es darum geht, korrekt mit der Codierung zu arbeiten.
-
@Language
teilt IIS mit, welche registrierte Active Scripting Language verwendet werden soll, um die ASP-Seite zu verarbeiten. -
@CodePage
teilt IIS mit, welche Codepage zum Verarbeiten der ASP-Seite verwendet werden soll. Wenn die Seite mitUTF-8
gespeichert wurde dann muss IIS beim Verarbeiten der Seite wissen, dass es CodePage65001
verwenden soll (auch bekannt alsUTF-8
) .
Das bedeutet, dass @CodePage
sollte immer mit der physikalischen Kodierung übereinstimmen, die beim Erstellen der Seite verwendet wurde. Möglicherweise müssen Sie einen erweiterten Texteditor verwenden, um dies herauszufinden, einige Beispiele sind Notepad++
(zeigt die Codierung in der Statusleiste unten rechts im GUI-Fenster an) und Visual Studio
(Hat einen versteckten Menübefehl namens Advanced Save Options
auf die durch Anpassen der Menüleiste zugegriffen werden kann) .
<% Response.CodePage = 65001 %>
Wiederum oft missverstanden, besteht der Zweck dieses Befehls darin, IIS mitzuteilen, wie dynamische Zeichenfolgen codiert werden sollen (mit dynamischen Zeichenfolgen meinen wir alles, was mit Response.Write()
ausgegeben wird ) . Möglicherweise der wichtigste Teil des gesamten Prozesses, wenn es falsch eingestellt ist oder angenommen wird, dass Codierungskonflikte auftreten können und auftreten.
<% Response.CharSet = "UTF-8" %>
Dieser Befehl setzt den ;charset=utf-8
im Content-Type
Wenn die Antwort vom Server an den Client-Browser gesendet wird, teilt der HTTP-Header dem Browser mit, dass diese Antwort als UTF-8
verarbeitet werden soll eher dann den default.Bedeutungscode wie
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
ist überflüssig und sollte nicht verwendet werden. Erwähnenswert ist auch, dass es einen Befehl für den Content-Type
gibt HTTP-Header ebenso
Response.ContentType = "text/html"
wodurch es noch überflüssiger wird, als es ohnehin schon war.