Мое классическое приложение ASP подключается к Oracle 11g через ADODB следующим образом:
Set Connection1 = Server.CreateObject("ADODB.Connection")
Set Recordset = Server.CreateObject("ADODB.Recordset")
Connection1.Open = "Data Source=PIPCP;User Id=PIP104;Password=xxxxxxxxxxxx"
SQL = "Select CUST_NAME FROM PIP_CUST_HEAD;"
Recordset.Open SQL, Connection1
и отображая значение следующим образом:
Response.Write Recordset("CUST_NAME")
Значение всегда отображается как:
???? ??????
Я пробовал следующее, но безуспешно:
Мета-тег:
<meta content = "html/text; charset=utf-8" http-equiv = "Content-Type" />
CodePage:
Response.CodePage = 65001
Кодировка:
Response.Charset = "UTF-8"
Комбинация языка и кодовой страницы
<%@LANGUAGE = "VBSCRIPT" CODEPAGE = "65001"%>
Запросил данные в TOAD и без проблем получил арабский текст, так что сортировка базы данных хорошая. Он может хранить арабские значения и отображает арабские значения.
Я попытался вручную ввести арабский текст на странице ASP, и он отображается без каких-либо проблем.
Также пробовал без кодировки, кодовой страницы и метатега.
Данные извлекаются через ODBC. Я пробовал получить данные с нескольких серверов с разной конфигурацией, но они все равно не отображаются должным образом.
Поверьте, я несколько дней находил решение этой проблемы и искал везде, пробовал все решения.
Как я могу решить эту проблему? Любые предложения или решения будут приняты во внимание. Спасибо.
Попробуйте добавить charset=AL32UTF8
или charset=UTF8
в строку подключения. Другой вариант - использовать поставщика OLEDB вместо поставщика ODBC, который должен изначально обрабатывать кодировки docs.oracle.com/cd/E11882_01/win.112/e17726.pdf (стр. 39)
@SeanRingel, как указал Джон, это полностью зависит от того, используют ли они UTF-8 в Oracle, я думаю, что, вероятно, нет.
Переход с ODBC на OLEDB помог !!! Возникла проблема, так как я получал ошибку недопустимого символа, но это было связано с использованием точки с запятой в конце запроса, после удаления он работает отлично. Спасибо @SeanRingel за указание на провайдера.
Хотя у вас есть решение, но все же здесь другое решение - какой тип кодировки файла. Я столкнулся с такой же ошибкой, когда у меня был файл с кодировкой ANSI. Я просто изменил его на UTF-8 и разместил метатег chartset = "UTF-8".
Похоже, вы сделали все, что вам нужно, на стороне Classic ASP,
Response.CodePage = 65001
обычно является ключом к тому, чтобы все работало, поэтому я подозреваю, что проблема кроется на стороне Oracle? Я ничего не знаю конкретно об Oracle, но возможно ли, что ваши данные хранятся с использованием кодировки символов, отличной от UTF-8. В качестве альтернативы проблема может быть связана с коннектором - я знаю, что есть старая версия коннектора MySQL ODBC, которую все еще используют некоторые веб-хосты, которая не поддерживает UTF-8.