Разбиране как IIS обработва ASP кодиране
Както при всички проблеми с кодирането в Classic ASP, това помага да се разбере каква цел изпълняват различните команди (тъй като твърде често хората ги използват неправилно, защото изглежда решава проблема) .
<%@ Language = "VBScript" CodePage = 65001 %>
Този ред обикновено се разбира неправилно, синтаксисът <%@
е "Директива за ASP @ Processing" и служи за указване на IIS как да обработва ASP страницата и е може би една от най-важните команди, когато става въпрос за правилна работа с кодиране.
-
@Language
казва на IIS какъв регистриран активен език за скриптове трябва да се използва за обработка на ASP страницата. -
@CodePage
казва на IIS каква CodePage трябва да се използва за обработка на ASP страницата. Ако страницата е запазена с помощта наUTF-8
тогава IIS трябва да знае, когато обработва страницата, трябва да използва CodePage65001
(известен по друг начин катоUTF-8
) .
Това означава, че @CodePage
винаги трябва да съответства на физическото кодиране, което е било използвано при създаването на страницата. Може да се наложи да използвате усъвършенстван текстов редактор, за да решите това, някои примери са Notepad++
(показва кодиране в лентата на състоянието в долния десен ъгъл на прозореца на GUI) и Visual Studio
(Има скрита команда от менюто, наречена Advanced Save Options
до които можете да получите достъп чрез персонализиране на лентата с менюта) .
<% Response.CodePage = 65001 %>
Отново често неразбрана, целта на тази команда е да каже на IIS как трябва да бъдат кодирани динамични низове (под динамични низове имаме предвид всичко, което се извежда с помощта на Response.Write()
) . Вероятно най-важната част от целия процес, ако е зададен неправилно или се предполага, че несъответствията в кодирането могат да възникнат и се случват.
<% Response.CharSet = "UTF-8" %>
Тази команда задава ;charset=utf-8
в Content-Type
HTTP заглавката, когато отговорът се изпраща от сървъра към клиентския браузър, той казва на браузъра, че този отговор трябва да бъде обработен като UTF-8
а не по подразбиране. Значение на код като
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
е излишно и не трябва да се използва. Също така си струва да се отбележи, че има команда за Content-Type
HTTP заглавката също
Response.ContentType = "text/html"
което го прави още по-излишен, отколкото вече беше.