Capire come IIS elabora la codifica ASP
Come per tutti i problemi di codifica in ASP classico, aiuta a capire quale scopo soddisfano i vari comandi (poiché troppo spesso le persone li usano in modo errato, perché sembra risolvere il problema) .
<%@ Language = "VBScript" CodePage = 65001 %>
Questa riga è comunemente fraintesa, la sintassi <%@
è una "ASP @ Direttiva sul trattamento" e serve a dire a IIS come elaborare la pagina ASP ed è probabilmente uno dei comandi più importanti quando si tratta di lavorare correttamente con la codifica.
-
@Language
indica a IIS quale linguaggio di scripting attivo registrato deve essere utilizzato per elaborare la pagina ASP. -
@CodePage
indica a IIS quale CodePage deve essere utilizzato per elaborare la pagina ASP. Se la pagina è stata salvata utilizzandoUTF-8
quindi IIS deve sapere durante l'elaborazione della pagina che dovrebbe utilizzare CodePage65001
(altrimenti noto comeUTF-8
) .
Ciò significa che @CodePage
deve sempre corrispondere alla codifica fisica utilizzata al momento della creazione della pagina. Potrebbe essere necessario utilizzare un editor di testo avanzato per risolvere il problema, alcuni esempi sono Notepad++
(visualizza la codifica sulla barra di stato in basso a destra della finestra della GUI) e Visual Studio
(Ha un comando di menu nascosto chiamato Advanced Save Options
a cui si accede personalizzando la barra dei menu) .
<% Response.CodePage = 65001 %>
Anche in questo caso spesso frainteso, lo scopo di questo comando è dire a IIS come codificare le stringhe dinamiche (per stringhe dinamiche intendiamo tutto ciò che viene emesso utilizzando Response.Write()
) . Forse la parte più importante dell'intero processo, se è impostata in modo errato o se si presume che la codifica non corrisponda può e si verificano.
<% Response.CharSet = "UTF-8" %>
Questo comando imposta il ;charset=utf-8
nel Content-Type
L'intestazione HTTP quando la risposta viene inviata dal server al browser client indica al browser che questa risposta deve essere elaborata come UTF-8
piuttosto che il codice predefinito. Significato come
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
è superfluo e non dovrebbe essere utilizzato. Vale anche la pena notare che c'è un comando per Content-Type
Anche intestazione HTTP
Response.ContentType = "text/html"
rendendolo ancora più ridondante di quanto non fosse già.