我们有一个使用经典ASP的网站。
我们发布过程的一部分替换了文件中的值,我们在其中发现了一个错误,它将文件写为UTF-8。
这会导致我们的应用程序开始吐出垃圾。撇号作为一些编码字符返回。
如果我们删除说明此文件为UTF-8的BOM,则现在可以正确显示以前呈现为垃圾的文本。
当遇到UTF-8文件时,IIS会有什么不同吗?
答案 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")