Никакая информация нигде не является столь авторитетной, как официальная. Сегодня я наконец нашел решение проблемы кодировки ASP от MSDN.
Ниже приводится отрывок из MSDN.
Установка @CODEPAGE явно влияет на литеральные строки в одном ответе. Response.CodePage влияет на динамические строки в одном ответе, а Session.CodePage влияет на динамические строки во всех ответах в сеансе.
В этом предложении четко объясняются функции @CODEPAGE, Response.CodePage и Session.CodePage соответственно.
@CODEPAGE действует на все статические строки, такие как const blogname="my home" в файле.
Response.CodePage, Session.CodePage действует на все динамически выводимые строки, такие как <%=blogname%>.
Это предложение очень важно. Дело в том, что областью действия Response.CodePage является один ответ, а областью действия Session.CodePage, объявленной в SXNA, являются все ответы в сеансе.
Посмотрите на другое предложение.
Если Response.CodePage не задан явно на странице, он устанавливается неявно с помощью Session.CodePage, если сеансы включены. Если сеансы не включены, Response.CodePage устанавливается с помощью @CodePage, если @CodePage присутствует на странице. Если на странице нет @CodePage, Response.CodePage задается свойством метабазы AspCodePage. Если свойство метабазы AspCodePage не установлено или установлено в 0, Response.CodePage задается системной кодовой страницей ANSI.
На первый взгляд я понял, что это предложение означает следующее: когда сеансы включены, если Response.CodePage не объявлен, Response.CodePage будет назначен Session.CodePage. Если сеансы не включены, если объявлен @CodePage, Response.CodePage будет назначен @CodePage и т. д.....
Это предложение объясняет, почему после выхода из SXNA при вводе некоторых символов легко получить искаженные символы. другие страницы, такие как oblog, z-blog и т. д., поскольку другие программы не объявляют Response.CodePage, а SXNA объявляет Session.CodePage. Поэтому, как только вы вводите SXNA, Session.CodePage немедленно присваивается значение (другое). версии, есть Некоторым версиям присвоено 936, некоторым версиям присвоено 65001), а затем при входе в другие программы Response.CodePage сразу назначается Session.CodePage, если код Response.CodePage отличается от кода самой страницы. , страница будет искажена. Поэтому, когда при входе в z-блог появлялись искаженные символы, я проверял, что Session.CodePage и Response.CodePage оба были 936, а когда при входе в блог появлялись искаженные символы, Session.CodePage и Response.CodePage были 65001. То есть,
если
я хочу гарантировать поверхность листа. Если нет искаженного кода, следует объявить Response.CodePage, иначе он будет интерпретировать веб-страницу в соответствии с Session.CodePage (вместо интерпретации веб-страницы в соответствии с @codepage).
следуйте приведенному выше объяснению, я на самом деле очень смущен, потому что мы все. Это китайская операционная система. Вы можете попробовать выводить Session.CodePage каждый раз, когда входите в браузер. Вы можете видеть, что это 936! Почему он не назначил значение Session.CodePage 936 по умолчанию для Response.CodePage при входе в Z-блог? Вместо этого укажите @CodePage для Response.CodePage? При каких обстоятельствах Session.CodePage следует назначить Response.CodePage? Как понимать исходный текст «сессии включены»?
Возможно, приведенные выше слова следует понимать так:
при объявлении Session.CodePage какой-либо программой, если Response.CodePage не объявлен, Response.CodePage будет назначен Session.CodePage. Если Session.CodePage не был объявлен какой-либо программой, если был объявлен @CodePage, Response.CodePage будет присвоено значение @CodePage..., и окончательная часть динамического содержимого страницы будет интерпретироваться в соответствии со значением. из Response.CodePage.
Поскольку и Zblog, и Oblog объявляют @CodePage, когда пользователь только что запустил компьютер, а затем входит в браузер для просмотра Zblog и Oblog, Response.CodePage будет присвоено значение @CodePage, поэтому отображение листьев будет нормальным.
В этом предложении дополнительно объясняется причина искажения символов.
Если вы явно задали Response.CodePage или Session.CodePage, сделайте это перед отправкой нелитеральных строк клиенту. Если вы используете литеральные и нелитеральные строки на одной и той же странице, убедитесь, что это так. кодовая страница @CODEPAGE совпадает с кодовой страницей Response.CodePage, или литеральные строки кодируются иначе, чем нелитеральные строки, и отображаются неправильно.
Одно из наиболее полезных предложений заключается в том, что если Response.CodePage и @CODEPAGE различаются, будут генерироваться искаженные символы. То есть, когда @CODEPAGE=65001 Z-blog и Response.CodePage Z-blog присваивается значением 936 с помощью Session.CodePage, будут отображаться искаженные символы, и наоборот для блога.
Я не знаю, достаточно ли понятно приведенное выше объяснение -_-||
Позвольте мне объяснить, почему SXNA иногда присваивает Session.CodePage значение 936. У меня есть версия, которая пишет так:
<% OriginalCodePage=Session.CodePage %>
.. .....
<% Session.CodePage=OriginalCodePage %>
Когда пользователь входит в браузер, значение Session.CodePage по умолчанию равно 936. Значение по умолчанию 936 в настоящее время не объявлено программой, поэтому оно не будет назначено Response.CodePage. При входе в SXNA Session.CodePage выдается указанным выше. code становится Session.CodePage=936, объявленным программой, поэтому при повторном входе в Zblog Response.CodePage присваивается 936.
На данный момент все причины четко проанализированы.
Таким образом, код, гарантирующий, что лист asp не будет выглядеть искаженным, должен быть таким: (при условии, что это лист UTF-8)
<%@ CODEPAGE=65001 %>
<% Response.CodePage=65001%>
<% Response. Кодировка = "UTF-8" %>
Далее объясните, почему следует добавить Response.Charset, потому что MSDN сказал, что его следует добавить... Хаха
Если кодовая страница установлена на странице, то и Response.Charset также должен быть установлен.
Кроме того, формат файла
веб-страницы должен совпадать с @CODEPAGE, используемым на странице.
Вот почему некоторым программам, таким как zblog и pjblog, необходимо сохранять файлы в формате кодировки UTF8.
Таким образом, если все программы объявляют Response.CodePage, они не будут мешать Session.CodePage и вызывать искажение символов. Таким образом, Session.CodePage по-прежнему нелегко использовать!
Справочная статья: