经典ASP和UTF-8

7

我正在修改我的应用程序以适配utf-8页面。 因此每个ASP页面都需要有这段代码:

Response.CodePage = 65001 
Response.CharSet = "utf-8"

并且HTML

<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

我使用Visual Studio 2013将所有文档保存为UTF-8编码(没有签名)65001。

当我在HTML中写入特殊字符时,这个方法可以很好地工作:

<p>Atenção</p>

当我使用VBScript(旧版ASP)编写时,特殊字符会混乱,无法正常工作。我可以通过使用带有签名的UTF-8编码(with signature)保存文档(.asp)来解决这个问题。

那么,我的问题是:

  • 我是否必须在每个页面上都使用此编码(带有签名)?
  • 我可能遇到哪些问题?

我建议阅读这篇文章 - http://www.hanselman.com/blog/InternationalizationAndClassicASP.aspx 。似乎VS将字节顺序标记称为签名。 - John
所以,我的ASP页面必须有BOM。 - Onaiggac
2
包含BOM应该不会有任何问题。话虽如此,我经常将页面保存为UTF8而没有BOM,并且我没有遇到任何困难。(我倾向于不使用VS来处理Classic ASP,而是使用一个名为EditPlus的编辑器,它类似于Hanselman提到的Notepad2) - John
2个回答

7
你需要为每个 .asp 文件设置 @Codepage 指令。我们使用一个通用的 #include 文件,该文件在每个页面上首先被包含,并且前面有以下行:
<%@Codepage = 65001 %>
<% Option explicit %>
<% Response.Codepage = 65001 %>

请看关于Codepage指令的更多信息,请点击此处(备注部分)。链接页面是关于Session.Codepage的,如果您想使用内置会话,则可能会对您有所帮助。
所有文件都保存为BOM不是IIS的要求,我们已经将所有文件保存为无BOM,并正常工作。
根据我的经验,与ASP一起工作多年后,需要注意的是:我们有时会发现源文件的BOM潜入生成的输出中,这会导致AJAX / JSON响应出现问题。解决方法是在编写输出之前使用Response.Clear

只要您指定 <%@Codepage = 65001 %>,IIS ASP 预处理器就会理解需要将 ASP 页面视为 UTF-8,无论它是否有 BOM。 - user692942

1

我遇到了奇怪的字符问题,尝试了所有建议的编码设置,但都没有起作用。虽然上述方法可以将数据正确地存储到SQL数据库中,但仍无法正确显示(仍然是编码/解码问题)。

我的解决方法是从数据库连接字符串中删除“CharSet=utf8;”。

因此,我的连接字符串变为:

sConnection = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;CharSet=utf8;Port:3306;DATABASE=dbname;UID=uid;PASSWORD=*****;OPTION=3" 

我使用了:

sConnection = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;Port:3306;DATABASE=dbname;UID=uid;PASSWORD=*****;OPTION=3" 

事情现在正常显示!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接