Comprendre comment IIS traite l'encodage ASP
Comme pour tous les problèmes d'encodage dans Classic ASP, il est utile de comprendre à quoi servent les différentes commandes (car trop souvent les gens les utilisent de manière incorrecte, car cela semble résoudre le problème) .
<%@ Language = "VBScript" CodePage = 65001 %>
Cette ligne est souvent mal comprise, la syntaxe <%@
est une "ASP @ Processing Directive" et sert à indiquer à IIS comment traiter la page ASP et est probablement l'une des commandes les plus importantes lorsqu'il s'agit de travailler correctement avec l'encodage.
-
@Language
indique à IIS quel langage de script actif enregistré doit être utilisé pour traiter la page ASP. -
@CodePage
indique à IIS quelle page de code doit être utilisée pour traiter la page ASP. Si la page a été enregistrée en utilisantUTF-8
alors IIS doit savoir lors du traitement de la page qu'il doit utiliser CodePage65001
(autrement appeléUTF-8
) .
Cela signifie que @CodePage
doit toujours correspondre à l'encodage physique utilisé lors de la création de la page. Vous devrez peut-être utiliser un éditeur de texte avancé pour résoudre ce problème, par exemple Notepad++
(affiche l'encodage sur la barre d'état en bas à droite de la fenêtre de l'interface graphique) et Visual Studio
(Possède une commande de menu masquée appelée Advanced Save Options
accessible en personnalisant la barre de menu) .
<% Response.CodePage = 65001 %>
Encore une fois souvent mal compris, le but de cette commande est d'indiquer à IIS comment les chaînes dynamiques doivent être encodées (par chaînes dynamiques, nous entendons tout ce qui est généré à l'aide de Response.Write()
) . Peut-être la partie la plus importante de l'ensemble du processus, si elle est définie de manière incorrecte ou supposée, des incompatibilités d'encodage peuvent se produire et se produisent.
<% Response.CharSet = "UTF-8" %>
Cette commande définit le ;charset=utf-8
dans le Content-Type
En-tête HTTP lorsque la réponse est envoyée du serveur au navigateur client, il indique au navigateur que cette réponse doit être traitée en tant que UTF-8
plutôt que le code par défaut.Ce qui signifie comme
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
est superflu et ne doit pas être utilisé. A noter également qu'il existe une commande pour le Content-Type
En-tête HTTP également
Response.ContentType = "text/html"
ce qui le rend encore plus redondant qu'il ne l'était déjà.