Классическая подстановка текста ASP и кодировка UTF-8
У нас есть веб-сайт, который использует классический ASP.
Часть нашего процесса выпуска заменяет значения в файле, и мы обнаружили в нем ошибку, в которой он будет записывать файл как UTF-8.
Это заставляет наше приложение начинать выплескивать мусор. Апострофы возвращаются как некоторые закодированные символы.
Если мы затем удалим спецификацию, в которой говорится, что этот файл UTF-8, то текст, который ранее отображался как мусор, теперь отображается правильно.
Есть ли что-то, что IIS делает по-разному, когда он сталкивается с UTF-8 файлом?
Ответы
Ответ 1
UTF-8 не использует спецификации; это раздражающая ошибка в некоторых программных продуктах Microsoft, которые их там ставят. Вам нужно найти, какой шаг вашего процесса выпуска помещает спецификацию в кодировке UTF-8 в ваши файлы и исправить ее - вы должны прекратить это, даже если вы используете UTF-8, что на самом деле в эти дни лучше.
Но я сомневаюсь, что IIS вызывает проблему с отображением. Скорее всего, браузер угадывает кодировку конечной отображаемой страницы, и когда он видит байты, которые выглядят так, как будто они кодируются в кодировке UTF-8, угадывает всю страницу UTF-8. Вы должны быть в состоянии остановить это, указав окончательную кодировку с помощью HTTP-заголовка:
Content-Type: text/html;charset=iso-8859-1
и/или мета-элемент в HTML
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
Теперь (если ISO-8859-1 на самом деле является символом, в котором установлены ваши данные), он должен отображать ОК. Однако, если ваш файл действительно имеет спецификацию с кодировкой UTF-8 в начале, теперь вы увидите это как "ï" ¿на своей странице, что и похоже на эти байты в ISO-8859-1. Поэтому вам все равно нужно избавиться от этой ошибки.
Ответ 2
Я вчера искал тот же самый точный вопрос и наткнулся на:
http://blog.inspired.no/utf-8-with-asp-71/
Важная часть с этой страницы, если она уйдет...
ASP CODE:
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
и следующий тег HTML META:
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
Мы использовали метатег и свойство asp CharSet, но страница по-прежнему не отображалась правильно. После добавления остальных трех строк в asp файл все просто сработало.
Надеюсь, это поможет!
Ответ 3
Если вы используете доступ db, вы должны написать
Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM table")