“?” ASP 脚本显示时,MSSQL DB 中的字符被替换为(带有重音符号的大写字母 A)

"?" character in MSSQL DB getting replaced with (capital A with grave accennt) when displayed by ASP script

我正在尝试为遗留 ASP/MSSQL 网络应用程序提供支持 - 我没有参与软件的开发(构建它的公司已不存在)而且我不是托管它的服务器的管理员,我只是通过经销商帐户管理网站所有者的托管。我也不是 ASP 开发人员(更多的是 PHP 人员),除了基础知识之外我对它不太熟悉 - 在服务器迁移后更新数据库连接字符串等

问题是有问题的站点将各个页面的内容存储在 MSSQL 数据库中,并且大部分内容都包含链接。网站上几乎所有的内部链接都是类似 "main.asp?123" 的格式(“123”是数据库行的 ID)。问题是,从过去 8 个月左右的某个时间开始*,某些原因导致数据库内容中的链接显示为 "main.aspÀ123",换句话说,“?”字符被替换为“À”字符(带有重音符号的大写字母 A)。当然,这会破坏所有这些链接。请注意,Whosebug 不允许我在 post 标题中包含该字符,因为它似乎认为它表明我正在 posting 西班牙语......?

(*不幸的是我不知道那之后的时间,网站所有者不知道问题是什么时候开始出现的,所以我所要做的只是去年 10 月的 archive.org 快照,它在哪里工作)

我试图手动更改“?”相关数据库记录之一中的字符为“?” (问号的 HTML 实体),但这没有任何区别。我还检查了用于显示内容的 HTML 代码的字符编码,但这似乎也不是原因 - 相同的 ASP 文件包含 hard-coded 一些链接相同的页面(格式完全相同),并且这些页面正常工作:“?”没有被替换。

我还使用 MSSQL Management Studio Express 应用程序直接连接到数据库,但找不到数据库或 table 的任何 charset/character 编码选项。

我已经尝试联系托管服务提供商,但他们(M247 UK,以防万一有人好奇)可笑地没有帮助。他们的回答是 "durrrrrr, we checked a totally different link that wasn't actually the one that you clearly described AND highlighted in a screenshot, and it works when we check the wrong link, so the problem must be resolved, right?" 可以这么说,我不会推荐他们 - 曾经是 RedFox 主机的客户,自从 M247 购买他们以来,客户质量大幅下降。

有什么建议吗?如果这是 PHP/MySQL,我可能会首先创建一个小测试脚本,该脚本除了获取相关记录之一并显示其内容外什么都不做,以缩小问题范围 - 但我对 ASP 在这里做到这一点,至少不是没有大量的谷歌搜索(我能找到的大部分信息都是特定于 ASP.net 的)。

编辑:建议作为解决方案的线程似乎是针对 写入 到 MSSQL 而不是 读取 时的字符编码问题 -我已经尝试了该线程中建议的解决方案,none 有所作为。

看起来你正在从 UNICODE 转换成 ASCII 在线的某处...

查看此内容以快速演示所发生的情况。特别要注意从 inr 派生的 ascii 与从 unicode 派生的 ascii...

SELECT 
    t.n,
    ascii_char = CHAR(t.n),
    unicode_char = NCHAR(t.n),
    unicode_to_ascii = CONVERT(varchar(10), NCHAR(t.n))
FROM (
    SELECT TOP (1024)
        n = ROW_NUMBER() OVER (ORDER BY ao.object_id)
    FROM 
        sys.all_objects ao
    ) t
WHERE 1 = 1
    --AND CONVERT(varchar(10), NCHAR(t.n)) ='À'
;

我找到了一个似乎可以解决问题的解决方法:我之前试图用 &#63 替换代码中的 ? (取出 ; 以便它会显示代码而不是输出),这是行不通的。但是如果我改用 &quest 它似乎有效。

需要注意的一点是,我最初认为该问题仅影响来自 MSSQL 数据库的 read/displayed 内容似乎是错误的。相反,看起来同样的问题也发生在 ASP 脚本中的代码 "echo'd" 静态内容(我更像是一个 PHP 人,不确定正确的术语是因为 ASP 相当于 echo 是)。尽管硬编码为静态的链接(而不是 HTML 由 ASP 动态输出)不受影响。尽管将 ? 更改为 &quest 也适用于那些(最困难的部分是追踪我需要编辑的文件)。