【发布时间】:2016-08-16 20:25:45
【问题描述】:
如果 ASP 页面上有任何输入或输出,this sort of thing 就像一个魅力:
<%@ LANGUAGE="VBScript" CodePage = 65001 %>
<%
Response.CharSet = "UTF-8"
Response.CodePage = 65001
%>
但是,如果它是一个执行纯 VBS 的 ASP 页面,并且我通过 Server.CreateObject("ADODB.Command") 将非拉丁字符串作为参数传递给 MS SQL 存储过程,那么它会变成一系列 ? 字符,介于命令之间的某个位置已执行,MS SQL 将其放入 varchar 列中。
但是,我确实有一个 IIS 实例,在该实例上,相同的 ASP 页面将使用 UTF-8 编码将此类字符串插入到数据库中。由于我找不到允许它工作的 IIS 设置,我如何强制将 ADODB.Command 参数值转换为 UTF-8?
【问题讨论】:
-
如果您将 UTF-8 编码字符传递给 SQL Server,它们应该被放置在
NVARCHAR列而不是VARCHAR中,这将解释您遇到的编码不匹配。参数方面,您应该分别使用adVarWChar或adLongVarWChar的数据类型。 -
@Lankymart - 我现在将使用该 ADO 数据类型标志进行测试。我知道 DB 列 应该 是 NVARCHAR,但它是一个遗留系统。对how the very same database and code could have received UTF-8-encoded strings when the ASP is run from a different IIS server有任何见解吗?
-
有趣的问题,两个服务器上使用的是同一个提供程序吗?它还完全取决于页面在做什么,例如从表单发布数据。
-
@Lankymart:这个特定序列所做的所有事情都是通过 MSXML2.ServerXMLHTTP 进行一些 REST 并调用一些存储过程。我只是将修复发布为答案……尽管答案确实引发了更多问题。也许最大的问题是,“我在开发 ASP 经典系统时哪里出错了?” ;)
标签: utf-8 character-encoding asp-classic adodb