Compreendendo como o IIS processa a codificação ASP
Tal como acontece com todos os problemas de codificação no ASP clássico, ajuda a entender o propósito dos vários comandos (já que muitas vezes as pessoas os usam incorretamente, porque parece resolver o problema) .
<%@ Language = "VBScript" CodePage = 65001 %>
Esta linha é comumente mal interpretada, a sintaxe
<%@
é uma "ASP @ Diretiva de Processamento" e serve para dizer ao IIS como processar a página ASP e é provavelmente um dos comandos mais importantes quando se trata de trabalhar com codificação corretamente. -
@Language
informa ao IIS qual linguagem de script ativa registrada deve ser usada para processar a página ASP.
-
@CodePage
informa ao IIS qual CodePage deve ser usado para processar a página ASP. Se a página foi salva usandoUTF-8
então o IIS precisa saber ao processar a página, ele deve usar o CodePage65001
(também conhecido comoUTF-8
) .
Isso significa que
@CodePage
deve sempre corresponder à codificação física que foi usada quando a página foi criada. Você pode precisar usar um editor de texto avançado para resolver isso, alguns exemplos são Notepad++
(exibe a codificação na barra de status no canto inferior direito da janela GUI) e Visual Studio
(Tem um comando de menu oculto chamado Advanced Save Options
que pode ser acessado personalizando a barra de menus) . <% Response.CodePage = 65001 %>
Novamente, muitas vezes incompreendido, o propósito deste comando é dizer ao IIS como as strings dinâmicas devem ser codificadas (por strings dinâmicas queremos dizer qualquer coisa que seja gerada usando
Response.Write()
) . Possivelmente a parte mais importante de todo o processo, se for configurado incorretamente ou se as incompatibilidades de codificação forem assumidas, podem ocorrer e ocorrem. <% Response.CharSet = "UTF-8" %>
Este comando define o
;charset=utf-8
no Content-Type
Cabeçalho HTTP quando a resposta é enviada do Servidor para o Navegador do Cliente, ele informa ao Navegador que esta resposta deve ser processada como UTF-8
em vez do código default.Meaning como Response.AddHeader "Content-Type", "text/html; charset=utf-8"
é supérfluo e não deve ser usado. Também vale a pena notar que há um comando para o
Content-Type
cabeçalho HTTP também Response.ContentType = "text/html"
tornando-o ainda mais redundante do que já era.