получить юникод используя asp из sqlserver 2005 - PullRequest
1 голос
/ 29 ноября 2008

Я использую следующий код, чтобы извлечь сообщение из базы данных и затем записать его на html-страницу:

Dim strDSN, cnn, cmd
strDSN = "Driver={SQL Server};" & "Server=(local)\sql2k5;" & ...
set cnn = Server.CreateObject("ADODB.Connection")
cnn.ConnectionString = strDSN
cnn.CursorLocation = adUseClient
cnn.Open
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = cnn
cmd.CommandText = "select Message from tblRecipients where ID = 72"
cmd.CommandType = adCmdText
set getRecordset = Server.CreateObject("ADODB.Recordset")
getRecordset.Open cmd, , adOpenKeyset, adLockReadOnly

Response.write getRecordset("Message")

однако все, что я получаю, это "???????". Я проверил, что это не браузер, это то, что на самом деле написано.

чтобы вставить сообщение, которое я запустил обновить tblRecipients set Message = N'Добре ', где ID = 72 в диспетчере SQL сервера.

Любая помощь о том, как заставить его отображаться правильно?

Ответы [ 4 ]

1 голос
/ 30 ноября 2008

Ваша БД, вероятно, хранит данные в чем-то отличном от utf-8 (может быть, utf-16 или ucs 2?), Тогда как ваша страница asp (по умолчанию) ожидает utf-8. Вот почему ваши данные отображаются правильно из SQL Management Studio, но не со страницы ASP. Данные utf-8 в БД выглядят как забавные символы при просмотре из SQL Management Studio.

Я все еще пытаюсь выяснить, как хранить мои данные в utf-16 и разрешить asp-страницам отображать их без явного преобразования в utf-8 в каждом выражении sql. Изменение asp charset = "utf-16", похоже, не сработало.

1 голос
/ 02 декабря 2008

Добро пожаловать в интернационализацию. Я боролся весь этот день.

Рон прав. Вероятно, для вашей базы данных для сортировки установлено значение Latin-1 или что-то подобное, что, я считаю, эквивалентно ISO-8859-1.

Однако данные, которые вы храните, необходимо будет изменить. Например, если вы вставляете специальные символы, такие как умные двойные кавычки, вам нужно будет преобразовать их перед сохранением в базу данных. И наоборот, если вы не конвертируете входящие данные, вам придется конвертировать их с помощью стороннего инструмента при отображении данных прямо из базы данных. Я наткнулся на объект COM от ChilKat, который, я считаю, делает это. Я не могу найти что-то встроенное в Classic ASP, которое дало бы возможность конвертировать из ISO-8859-1 (или что-нибудь в этом отношении) в UTF-8 или наоборот.

Кроме того, в вашем HTML вам необходимо установить кодировку, равную типу кодировки, который вы хотите использовать.

Удачи.

0 голосов
/ 11 ноября 2009

Решение: Чувак, это было странно. Проблема заключалась в том, что фактический файл ASP был закодирован в ANSI. По-видимому, это то, что используется для кодирования, когда файл передается клиенту (это имеет смысл, если вы помните, что файл asp - это просто файл, который передается клиенту и слегка модифицируется механизмом asp). Решением было изменить кодировку ASP-файла на utf-8. Таким образом, когда символы utf-8 записываются в файл по пути к клиенту, они соответствуют кодировке остальной части файла и корректно читаются браузером.

Надеюсь, это поможет следующему человеку.
Cheers,
Энди.

0 голосов
/ 29 ноября 2008

Вы можете попробовать использовать собственный клиент SQL , чтобы посмотреть, исправит ли это вас, это немного дикое предположение, но я знаю, что это решило другие проблемы с типами данных и классическим ASP .

...