从sqlserver 2005使用asp检索unicode

时间:2008-11-28 23:36:57

标签: sql-server-2005 unicode asp-classic vbscript

我正在使用以下代码从数据库中检索消息,然后将其写入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")
然而,我得到的只是“???????”。我检查过它不是浏览器,实际上是写出来的。

插入我跑过的邮件     update tblRecipients set Message =N'Добре',其中ID = 72 在SQL服务器管理器中。

有关如何正确显示的任何帮助吗?

4 个答案:

答案 0 :(得分:1)

您的数据库可能存储的数据不是utf-8,(可能是utf-16或ucs 2?),而您的asp页面(默认情况下)需要utf-8。这就是为什么您的数据在SQL管理工作室中显示正确,而不是从ASP页面显示。从SQL Management Studio查看时,数据库中的utf-8数据看起来像时髦的字符。

我仍在试图弄清楚如何在utf-16中存储我的数据并允许asp页面显示它,而不是在每个sql语句中显式转换为utf-8。更改asp charset =“utf-16”似乎没有做到这一点。

答案 1 :(得分:1)

欢迎国际化。我整天都在争吵。

罗恩是对的。您的数据库排序规则可能设置为Latin-1或类似的东西,我相信它等同于ISO-8859-1。

但是您存储的数据需要更改。例如,如果要粘贴特殊字符(如智能双引号),则需要在将它们保存到数据库之前进行转换。相反,如果您不转换进入的数据,则必须在直接从数据库显示数据时使用第三方工具对其进行转换。我遇到了ChilKat的COM对象,我相信这样做。我找不到经典ASP内置的任何能够将ISO-8859-1(或其他任何东西)转换为UTF-8的能力,反之亦然。

此外,在HTML中,您需要将字符集设置为您希望使用的编码类型。

祝你好运。

答案 2 :(得分:0)

您可以尝试使用SQL Native Client来查看是否为您修复了它,这是一个疯狂的猜测,但我知道它已经解决了数据类型和经典ASP的其他问题。

答案 3 :(得分:0)

解决方案: 伙计,这是一个奇怪的。问题是实际的ASP文件是用ANSI编码的。显然这是将文件传递给客户端时使用的编码(如果你记得asp文件只是传递给客户端的文件,有点被asp引擎修改,那就有意义了)。解决方案是将ASP文件的编码更改为utf-8。因此,当utf-8字符在到达客户端的途中写入文件时,它们匹配文件其余部分的编码,并由浏览器正确读取。

希望这有助于下一个人 干杯,
安迪。