经典ASP和UTF-8

经典ASP和UTF-8,utf-8,character-encoding,asp-classic,Utf 8,Character Encoding,Asp Classic,我正在将我的应用程序更改为使用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" /> 我使用编码UTF-8(无签名)65001在Visual Studio 2013中

我正在将我的应用程序更改为使用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" />

我使用编码UTF-8(无签名)65001在Visual Studio 2013中保存了所有文档

当我在HTML中编写特殊字符时,这样做很好:

<p>Atenção</p>
Atenção

但是,当我用VBScript(经典ASP)编写时,它不起作用,而且特殊字符很混乱。我可以通过使用编码UTF-8(带有签名)65001保存文档(.asp)来修复这些问题

因此,我的问题是:

  • 我是否必须在每页上使用此编码(带签名)
  • 我会有什么样的问题

您需要为每个
.asp
文件设置
@Codepage
指令。我们正在使用一个通用的
#include
文件,该文件首先包含在每页上,前面有以下行:

<%@Codepage = 65001 %>
<% Option explicit %>
<% Response.Codepage = 65001 %>

请参阅有关代码页指令的更多信息(备注部分)。链接页面是关于
Session.Codepage
的,如果您想使用内置会话,它可能会让您感兴趣

使用BOM保存所有文件不是IIS的要求,我们保存的所有文件都没有BOM正常工作


在与ASP合作多年后,我的经验中有一点值得注意:我们有时会遇到源文件的BOM混入生成的输出中的问题,这会导致AJAX/JSON响应出现问题。补救方法是使用
响应。在写入输出之前清除

我遇到了奇怪字符的问题,尝试了所有建议的编码设置,但没有任何效果,尽管上述方法确实将数据正确地输入了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" 

事情现在显示正确了

我建议阅读此文-VS似乎将字节顺序标记称为签名。因此,我的ASP页面必须有BOM表。包含BOM表不会有任何伤害。也就是说,我经常将页面保存为UTF8,没有BOM表,并且没有任何困难。(尽管我倾向于不使用VS作为经典ASP,但我使用了一个名为EditPlus的编辑器,它类似于Hanselman提到的Notepad2),只要您指定
,IIS ASP预处理器就会理解,无论是否有BOM,它都需要将ASP页面视为UTF-8。