Comprender cómo IIS procesa la codificación ASP
Al igual que con todos los problemas de codificación en ASP clásico, es útil comprender qué propósito cumplen los diversos comandos (ya que con demasiada frecuencia las personas los usan incorrectamente, porque parece resolver el problema) .
<%@ Language = "VBScript" CodePage = 65001 %>
Esta línea suele malinterpretarse, la sintaxis <%@
es una "ASP @ Directiva de procesamiento" y sirve para decirle a IIS cómo procesar la página ASP y es probablemente uno de los comandos más importantes cuando se trata de trabajar con la codificación correctamente.
-
@Language
le dice a IIS qué lenguaje de secuencias de comandos activo registrado debe usarse para procesar la página ASP. -
@CodePage
le dice a IIS qué CodePage debe usarse para procesar la página ASP. Si la página se ha guardado usandoUTF-8
entonces IIS necesita saber cuándo procesar la página debe usar CodePage65001
(también conocido comoUTF-8
) .
Esto significa que @CodePage
siempre debe coincidir con la codificación física que se utilizó cuando se creó la página. Es posible que necesite usar un editor de texto avanzado para resolver esto, algunos ejemplos son Notepad++
(muestra la codificación en la barra de estado en la parte inferior derecha de la ventana GUI) y Visual Studio
(Tiene un comando de menú oculto llamado Advanced Save Options
al que se puede acceder personalizando la barra de menú) .
<% Response.CodePage = 65001 %>
Nuevamente, a menudo se malinterpreta, el propósito de este comando es decirle a IIS cómo se deben codificar las cadenas dinámicas (por cadenas dinámicas nos referimos a cualquier cosa que se genere usando Response.Write()
) . Posiblemente la parte más importante de todo el proceso, si se configura incorrectamente o si se supone que pueden ocurrir discrepancias de codificación.
<% Response.CharSet = "UTF-8" %>
Este comando establece el ;charset=utf-8
en el Content-Type
Encabezado HTTP cuando la respuesta se envía desde el servidor al navegador del cliente, le dice al navegador que esta respuesta debe procesarse como UTF-8
en lugar del código predeterminado. Significado como
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
es superfluo y no debe ser utilizado. También vale la pena señalar que hay un comando para Content-Type
Encabezado HTTP también
Response.ContentType = "text/html"
haciéndolo aún más redundante de lo que ya era.