Zrozumienie, jak IIS przetwarza kodowanie ASP
Podobnie jak w przypadku wszystkich problemów z kodowaniem w klasycznym ASP, pomaga zrozumieć, jaki cel spełniają różne polecenia (ponieważ zbyt często ludzie używają ich niepoprawnie, ponieważ wydaje się, że rozwiązuje to problem) .
<%@ Language = "VBScript" CodePage = 65001 %>
Ta linia jest często źle rozumiana, składnia <%@
to "Dyrektywa ASP @ Processing" i służy do informowania IIS, jak przetwarzać stronę ASP i jest prawdopodobnie jednym z najważniejszych poleceń, jeśli chodzi o prawidłową pracę z kodowaniem.
-
@Language
informuje IIS, jaki zarejestrowany aktywny język skryptowy powinien być używany do przetwarzania strony ASP. -
@CodePage
informuje IIS, która strona kodowa powinna zostać użyta do przetworzenia strony ASP. Jeśli strona została zapisana przy użyciuUTF-8
następnie IIS musi wiedzieć podczas przetwarzania strony, że powinien użyć CodePage65001
(znany również jakoUTF-8
) .
Oznacza to, że @CodePage
powinien zawsze odpowiadać fizycznemu kodowaniu użytemu podczas tworzenia strony. Aby to rozwiązać, może być konieczne użycie zaawansowanego edytora tekstu, niektóre przykłady to Notepad++
(wyświetla kodowanie na pasku stanu w prawym dolnym rogu okna GUI) i Studio wizualne
(Posiada ukryte polecenie menu o nazwie Advanced Save Options
do którego można uzyskać dostęp, dostosowując pasek menu) .
<% Response.CodePage = 65001 %>
Ponownie często źle rozumiane, celem tego polecenia jest poinformowanie IIS, jak powinny być kodowane ciągi dynamiczne (przez ciągi dynamiczne rozumiemy wszystko, co jest wyprowadzane za pomocą Response.Write()
) . Prawdopodobnie najważniejsza część całego procesu, jeśli jest ustawiona nieprawidłowo lub zakłada się, że niezgodności kodowania mogą i występują.
<% Response.CharSet = "UTF-8" %>
To polecenie ustawia ;charset=utf-8
w Content-Type
Nagłówek HTTP, gdy odpowiedź jest wysyłana z serwera do przeglądarki klienta, informuje przeglądarkę, że ta odpowiedź powinna zostać przetworzona jako UTF-8
zamiast domyślnego. Znaczenie kodu, takiego jak
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
jest zbędny i nie powinien być używany. Warto również zauważyć, że istnieje polecenie dla Content-Type
Również nagłówek HTTP
Response.ContentType = "text/html"
czyniąc go jeszcze bardziej zbędnym niż dotychczas.