经典ASP文本替换和UTF-8编码

时间:2009-09-21 10:36:42

标签: asp-classic utf-8 iis-6

我们有一个使用经典ASP的网站。

我们发布过程的一部分替换了文件中的值,我们在其中发现了一个错误,它将文件写为UTF-8。

这会导致我们的应用程序开始吐出垃圾。撇号作为一些编码字符返回。

如果我们删除说明此文件为UTF-8的BOM,则现在可以正确显示以前呈现为垃圾的文本。

当遇到UTF-8文件时,IIS会有什么不同吗?

3 个答案:

答案 0 :(得分:14)

我昨天在同一个问题上搜索并遇到过:

http://blog.inspired.no/utf-8-with-asp-71/

该页面的重要部分,以防它消失......

ASP代码:

Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"

以及以下HTML META标记:

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

我们使用了meta标签和asp CharSet属性,但页面仍无法正确呈现。将其他三行添加到asp文件后,一切正常。

希望这有帮助!

答案 1 :(得分:6)

UTF-8不使用BOM;在一些微软软件中,这是一个恼人的错误。你需要找到你的发布过程的哪一步将UTF-8编码的BOM放在你的文件中并修复它 - 即使你 使用UTF-8,你也应该停止它,这些天真的是最好的。

但我怀疑它是导致显示问题的IIS。浏览器更有可能猜测最终显示页面的字符集,当它看到看起来像是UTF-8编码的字节时,它会猜测整个页面是UTF-8。您应该能够通过使用HTTP标头声明一个明确的字符集来阻止它:

Content-Type: text/html;charset=iso-8859-1

和/或HTML

中的元元素
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />

现在(假设ISO-8859-1实际上是您的数据所在的字符集),它应该显示OK。但是,如果您的文件在开始时确实具有UTF-8编码的BOM,您现在将在页面中看到“”,这是ISO-8859-1中的字节。所以你仍然需要摆脱那个misBOM。

答案 2 :(得分:1)

如果使用access db,则应编写

Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM  table")