2008-11-28 58 views
1

我使用下面的代码从数据库中检索信息,然后将它写出来的html页面ASP的Unicode:检索使用2005年SQLSERVER

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设置消息=N'Добре'其中ID = 72 在SQL服务器管理器中。

如何让它正确显示的任何帮助?

回答

0

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

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

0

您可能会尝试使用SQL Native Client来查看是否为您解决了这个问题,这有些荒谬,但我知道它解决了数据类型和经典ASP的其他问题。

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或类似的东西,我相信这相当于ISO-8859-1。

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

另外,在您的HTML中,您需要设置与您希望使用的编码类型相同的字符集。

祝你好运。