我们有一个使用Classic ASP的网站。
我们的发布过程的一部分替换了文件中的值,我们在其中发现了一个错误,它将文件写为UTF-8。
这会导致我们的应用程序开始吐出垃圾。撇号作为一些编码字符返回。
如果我们然后删除说明此文件是UTF-8的BOM,那么之前呈现为垃圾的文本现在可以正确显示。
当遇到UTF-8文件时,IIS有什么不同的做法吗?
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。
我昨天在同一个问题上搜索并遇到了:
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文件后,一切正常。
希望这可以帮助!
如果你使用access db,你应该写
Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM table")