【问题标题】:ASP classic: What determines character encoding for ADODB?ASP 经典:什么决定了 ADODB 的字符编码?
【发布时间】: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 中,这将解释您遇到的编码不匹配。参数方面,您应该分别使用adVarWCharadLongVarWChar 的数据类型。
  • @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


【解决方案1】:

ASP 字符编码可能是一个变化无常的事情。在 169 个 ASP 文件的代码库中,一个已使用 UTF-8-BOM 编码保存。它被部署到一台机器上,而不是另一台机器上。它只包含一些 VBS FUNCTION 定义。但是任何包含带有 BOM 编码的文件的 ASP 都立即无法在 UTF-8 中附加 ADODB.Command 参数。相反,它显然决定——但仅出于 ADODB.Command 的目的,而不是用于 MSXML2.ServerXMLHTTP 对象上的 JSON PUT——所有不是 ASCII 的都是?

就是这样:将代码文件另存为 UTF-8-BOM 和 ASP 中断。将其保存为 UTF-8 即可再次使用。

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

只是有两种不同的编码会混淆经典的 ASP 吗?我不知道,但是here's at least one other answer that suggests that BOM encoding causes problems

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多