Классическая подстановка текста 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")