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

时间:2019-06-20 16:01:33

标签: sql-server character-encoding asp-classic

我正在尝试为旧版ASP / MSSQL Web应用程序提供支持-我没有参与软件的开发(建立该公司的公司不再存在),而且我不是服务器的管理员在托管的地方,我只是通过转销商帐户来管理网站所有者的托管。我也不是ASP开发人员(更多是PHP方面的人),并且对基础知识不那么熟悉-服务器迁移后更新数据库连接字符串等。

问题是有问题的站点将单个页面的内容存储在MSSQL数据库中,并且许多内容都包含链接。该站点上几乎所有内部​​链接的格式都类似于“ main.asp?123”(其中“ 123”是数据库行的ID)。问题是,从过去8个月左右的某个时间开始*,某种原因导致数据库内容中的链接显示为“main.aspÀ123”,即“?”。字符将替换为“À”字符(带有重音符号的大写A)。当然,这会中断所有这些链接。请注意,Stackoverflow不允许我在帖子标题中包含该字符,因为它似乎认为这表明我在西班牙语中发帖...?

(*不幸的是,我不知道更晚的时间,网站所有者不知道问题何时开始发生,所以我所要做的只是去年10月的工作原理的archive.org快照。 )

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

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

我曾尝试与托管服务提供商联系,但他们(如果有人好奇的话,是M247 UK)一直很无助。他们的回应是“ durrrrrr,我们检查了一个完全不同的链接,它实际上不是您清楚描述并在屏幕截图中突出显示的链接,并且当我们检查错误的链接时它可以工作,因此问题必须解决吧?”可以这么说,我不推荐他们-曾经是RedFox托管的客户,自M247购买它们以来,客户的质量已经大幅下降。

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

编辑:建议的解决方案线程似乎是针对写入到MSSQL而不是读取时的字符编码问题-我已经尝试了建议的解决方案在那个线程中,没有任何区别。

2 个答案:

答案 0 :(得分:0)

好像您正在沿某处从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)) ='À'
;

答案 1 :(得分:0)

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

有一点要注意,似乎我本来是不对的,认为该问题仅影响从MSSQL DB读取/显示的内容。而是,ASP脚本中的代码“回显”了静态内容,这似乎也出现了同样的问题(我更像是一个PHP人士,不确定ASP的正确术语是否等同于{{1} }是)。尽管硬编码为静态的链接(而不是HTML由ASP动态输出)不受影响。尽管将echo换成?也可以解决这些问题(最困难的部分是跟踪我需要编辑的文件)。