gpt4 book ai didi

mysql - 使用经典 ASP 随机 ADODB.Recordset 是 "double encoded"

转载 作者:行者123 更新时间:2023-11-29 00:36:02 25 4
gpt4 key购买 nike

我有一个问题,但我不明白是什么原因造成的。我在一个遗留网站上工作,用经典 ASP 编写(天哪,为什么我),有时显然是随机时间,没有任何解释,ADODB.Recordset 的值被双编码打印。

双重编码我的意思是“UTF-8 多字节字符串的 ASCII 表示的 UTF-8 编码”所以“é”看起来像“É”(具有完全相同的编码)。

让我发疯的是,这似乎是随机发生的,50% 的时间编码正确,另外 50% 的时间编码不正确。

我要指出的是,它在不同时间发生在同一页面上,因此在多次页面加载后,您可以正确显示它们,然后损坏,然后再次正确显示,依此类推。

这件事发生在 7 年前,在这个网站的早期阶段,但是很多水已经从桥下流过,最初在这个网站上工作的人中只有一个人还在公司工作。他不记得他们做了什么来解决这个问题,他只告诉我“数据库连接编码被保存到 session 中”,这也许可以解释为什么有这么多 Session.CodePage = 65001 在页面周围。

我什至试图通过查询将字符集强制为 utf8,但显然它没有用。

使用的驱动程序是旧的 MySQL ODBC 3.51 驱动程序

提前感谢您提供任何建议或解决方案(不幸的是,摆脱经典 ASP 不是一种选择)。

[更新]

这是一个情节转折,如果我输出这样的内容,它会中断更少的次数:

Session.CodePage = 1252
Response.Write(Property)
Session.CodePage = 65001

实际上我在网站的几乎所有地方都发现了这段代码,好像数据库驱动根本不关心连接的字符集。

最佳答案

我进行了一些测试,感谢@webaware 的建议,我说服自己将 ODBC 驱动程序 更新到 5.1 版本,经过一些调整后,网站似乎稳定了,这就是我使用的代码:

Response.AddHeader "Content-Type", "text/html; charset=UTF-8"
Session.CodePage = 65001
Dim ConnString:ConnString = "driver={MySQL ODBC 5.1 Driver};server=localhost;port=3306;database=database;uid=uid;pwd=pwd"

其他组合似乎打破了输出编码,现在开箱即用。

我希望这对 future 有所帮助。

关于mysql - 使用经典 ASP 随机 ADODB.Recordset 是 "double encoded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com