Классическая замена текста ASP и кодировка UTF-8 - PullRequest
11 голосов
/ 21 сентября 2009

У нас есть сайт, который использует Classic ASP.

Часть нашего процесса выпуска заменяет значения в файле, и мы обнаружили в нем ошибку, из-за которой файл будет записан как UTF-8.

Это приводит к тому, что наше приложение начинает выбрасывать мусор. Апострофы возвращаются как некоторые закодированные символы.

Если мы затем удалим спецификацию, в которой говорится, что этот файл имеет формат UTF-8, то текст, который ранее отображался как мусор, теперь отображается правильно.

Есть ли что-то, что IIS делает по-другому, когда встречается с UTF-8 файлом?

Ответы [ 3 ]

15 голосов
/ 25 августа 2011

Вчера я искал точно такой же вопрос и наткнулся:

http://blog.inspired.no/utf-8-with-asp-71/

Важная часть этой страницы, на случай, если она исчезнет ...

ASP КОД:

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" />

Мы использовали метатег и свойство CharSet asp, но страница по-прежнему не отображалась правильно. После добавления трех других строк в asp-файл все просто заработало.

Надеюсь, это поможет!

6 голосов
/ 21 сентября 2009

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 фактически является набором символов, в котором находятся ваши данные), он должен отобразить OK. Однако, если ваш файл действительно имеет кодировку UTF-8 в начале, вы теперь увидите это как «» »» на своей странице, как эти байты выглядят в ISO-8859-1. Поэтому вам все еще нужно избавиться от этой ошибки.

1 голос
/ 14 сентября 2013

Если вы используете доступ к БД, вы должны написать

Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM  table")
...