我有问题,我不明白是什么原因造成的。我在一个遗留网站上工作,用 Classic ASP 编写(天哪,为什么是我),有时显然是随机时间,没有任何解释,来自 ADODB.Recordset 的值被打印双编码。
对于双重编码,我的意思是“ UTF-8 多字节字符串的 ASCII 表示的 UTF-8 编码”,因此“ é ”看起来像“ é ”(具有完全相同的编码)。
让我抓狂的是,这似乎是随机发生的,50% 的时间编码正确,另外 50% 的编码不正确。
让我指出它在不同时间发生在同一页面上,因此在几次页面加载后,您可以正确显示它们,然后损坏,然后再次正确等等。
这件事发生在 7 年前这个网站的早期,但是很多水已经从桥下流过,只有一个最初在这个网站上工作的人仍然在公司工作。他不记得他们做了什么来解决这个问题,他让我只说“数据库连接编码已保存到会话中”,这也许可以解释为什么Session.CodePage = 65001
页面周围有这么多。
我什至试图utf8
通过查询强制字符集,但显然它不起作用。
使用的驱动程序是 olde MySQL ODBC 3.51 Driver
。
在此先感谢您提供任何建议或解决方案(不幸的是,摆脱 Classic ASP 不是一种选择)。
[更新]
这是一个情节转折,如果我输出这样的内容,它的中断次数会更少:
Session.CodePage = 1252
Response.Write(Property)
Session.CodePage = 65001
实际上,我几乎在网站的任何地方都发现了这段代码,好像数据库驱动程序根本不关心连接的字符集。