2016-08-16 2 views
1

Если есть вход или выход на странице ASP this sort of thing работает как шарм:ASP classic: что определяет кодировку символов для ADODB?

<%@ LANGUAGE="VBScript" CodePage = 65001 %> 
<% 
    Response.CharSet = "UTF-8" 
    Response.CodePage = 65001 
%> 

Но если это страница ASP выполняет чисто VBS и я прохожу нелатинскую строку символов в качестве параметра МСА SQL sproc через Server.CreateObject("ADODB.Command"), то он превращается в ряд символов ? где-то между тем, когда команда Executed и MS SQL помещает ее в столбец varchar.

Однако у меня есть один экземпляр IIS, на котором одни и те же страницы ASP будут вставлять такие строки в базу данных с кодировкой UTF-8. Поскольку я не могу найти параметр IIS, который позволяет это работать, как я могу заставить значение ADODB.Command Parameter быть преобразованным в UTF-8?

+0

Если вы передаете кодированные символы UTF-8 на SQL Server, их следует помещать в столбец 'NVARCHAR', а не' VARCHAR', что объясняет несоответствие кодировки, с которой вы сталкиваетесь. В качестве параметра вы должны использовать тип данных 'adVarWChar' или' adLongVarWChar' соответственно. – Lankymart

+0

@ Lankymart - Я буду тестировать этот флаг типа ADO прямо сейчас. Я знаю, что столбец DB * должен быть NVARCHAR, но это устаревшая система. Любое понимание [того, как одна и та же база данных и код могли получать строки с кодировкой UTF-8 при запуске ASP с другого сервера IIS] (http://serverfault.com/q/796971/350508)? – feetwet

+0

Интересный вопрос: тот же провайдер используется на обоих серверах? Это также полностью зависит от того, что делает страница, например, для публикации данных из формы. – Lankymart

ответ

1

ASP кодировка символов может быть изменчивой. В кодовой базе из 169 файлов ASP один был сохранен с кодировкой UTF-8-BOM. Он был развернут на одну машину, но не на другую. Все это содержало некоторые определения VBS FUNCTION. Но любой ASP, который включал этот файл с кодировкой BOM, сразу же оказался неспособным добавить параметр ADODB.Command в UTF-8. Вместо этого он, по-видимому, решил –, но только для целей ADODB.Command, не для, скажем, JSON PUT над объектами MSXML2.ServerXMLHTTP –, что все, что не было ASCII, было ?.

Вот и все: сохраните код в формате UTF-8-BOM и ASP. Сохраните его как UTF-8, он снова работает.

Как вы можете обнаружить, что один из ваших 169 файлов ASP, распространенных по нескольким десяткам каталогов, сохраняется с использованием «неправильной» кодировки? Я не знаю. Мне повезло, я узнал, где была проведена последняя работа, и случилось проверить кодировку файла в Notepad ++.

Есть ли просто два разных кодировки, которые смешивают классический ASP? Я не знаю, но here's at least one other answer that suggests that BOM encoding causes problems.

+0

Да, это сделает, хорошо поймать. – Lankymart