Utf 8 什么决定了ADODB的字符编码?

Utf 8 什么决定了ADODB的字符编码?,utf-8,character-encoding,asp-classic,adodb,Utf 8,Character Encoding,Asp Classic,Adodb,如果ASP页面上有任何输入或输出,则会像符咒一样工作: <%@ LANGUAGE="VBScript" CodePage = 65001 %> <% Response.CharSet = "UTF-8" Response.CodePage = 65001 %> 但是,如果它是一个执行纯VBS的ASP页面,并且我通过Server.CreateObject(“ADODB.Command”)将一个非拉丁字符字符串作为参数传递给MS SQL存储过程,那么在执行命令

如果ASP页面上有任何输入或输出,则会像符咒一样工作:

<%@ 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?

ASP字符编码可能是一件易变的事情。在169个ASP文件的代码库中,有一个文件是用UTF-8-BOM编码保存的。它被部署到一台机器上,但没有部署到另一台机器上。它只包含一些VBS
函数
定义。但是,任何包含BOM编码的文件的ASP都立即无法在UTF-8中附加ADODB.Command参数。相反,它显然决定——但只是为了ADODB.Command的目的,而不是为了(比如)将JSON置于MSXML2.ServerXMLHTTP对象之上——所有不是ASCII的东西都是

就是这样:将代码文件保存为UTF-8-BOM和ASP断点。将其另存为UTF-8,它将再次工作

您如何发现分布在几十个目录中的169个ASP文件之一是使用“错误”编码保存的?我不知道。我很幸运,碰巧知道最近的工作是在哪里完成的,并且碰巧用Notepad++检查了文件的编码


只是有两种不同的编码混淆了经典的ASP?我不知道,但是。

如果要将UTF-8编码字符传递给SQL Server,它们应该放在
NVARCHAR
列中,而不是
VARCHAR
,这将解释您遇到的编码不匹配。在参数方面,您应该分别使用
adVarWChar
adLongVarWChar
的数据类型。@Lankymart-我现在将使用ADO数据类型标志进行测试。我知道DB列应该是NVARCHAR,但它是一个遗留系统。有什么见解吗?有趣的问题是,两台服务器上使用的是同一个提供程序吗?它还完全取决于页面正在做什么,例如,从表单发布数据。@Lankymart:这个特定序列所做的只是通过MSXML2.ServerXMLHTTP进行一些休息,并调用一些存储过程。我刚刚发布了修复作为一个答案。。。尽管答案确实提出了更多的问题。也许最大的问题是,“我在使用ASP经典系统时哪里出了问题?”