我们有一个使用经典ASP的网站。经典ASP文本替换和UTF-8编码
我们发布过程的一部分将文件中的值替换为文件中的值,我们发现了一个错误,它会将文件写为UTF-8。
这会导致我们的应用程序开始吐出垃圾。撇号以某些编码字符的形式返回。
如果我们接着去除表示此文件为UTF-8的BOM,则以前呈现为垃圾的文本现在可以正确显示。
当遇到UTF-8文件时IIS有什么不同吗?
我们有一个使用经典ASP的网站。经典ASP文本替换和UTF-8编码
我们发布过程的一部分将文件中的值替换为文件中的值,我们发现了一个错误,它会将文件写为UTF-8。
这会导致我们的应用程序开始吐出垃圾。撇号以某些编码字符的形式返回。
如果我们接着去除表示此文件为UTF-8的BOM,则以前呈现为垃圾的文本现在可以正确显示。
当遇到UTF-8文件时IIS有什么不同吗?
UTF-8不使用物料清单;在某些微软软件中,这是一个令人讨厌的错误特性,使它们存在。你需要找到你的发布过程在你的文件中放入一个UTF-8编码BOM,并修复它 - 你应该停止,即使你使用UTF-8 是,现在真的是最好的。
但我怀疑这是IIS导致显示问题。浏览器更可能猜测最终显示页面的字符集,并且当它看到看起来像是UTF-8编码的字节时,它会猜测整个页面是UTF-8。您应该能够通过使用HTTP头指出一个明确的字符集,以阻止它这样做:在HTML
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
Content-Type: text/html;charset=iso-8859-1
和/或meta元素现在(假设ISO-8859- 1实际上是你的数据所在的字符集),它应该显示OK。但是,如果您的文件在开始时真的具有UTF-8编码的BOM,现在您将在页面中看到“”,这些字节在ISO-8859-1中是这样的。所以你仍然需要摆脱那个misBOM。
这是有道理的。 这实际上是一些专门为处理这类问题而编写的代码中的一个错误。 谢谢。 – 2009-09-21 12:51:44
我必须承认这个答案令我困惑。“UTF-8不使用物料清单”,你能否说得通吗?这是一种“错误”?我从来没有遇到过使用包含这个零宽度空格字符的UTF-8文件的问题,你遇到了什么问题? – AnthonyWJones 2009-09-22 06:50:41
任何基于字节的文本工具(例如shell,配置文件加载器等)将在文件开始处显示“”时立即翻转; UTF-8的明确目标是与对Unicode一无所知的工具兼容,但UTF-8 + BOM打破了这一点。即使一些支持Unicode的工具也会跳过它,因为只有预期BOM存在并且通过UTF-16的Unicode解码过程自动删除。 UTF-8 + BOM打破了应用程序,在Unicode规范中没有理由使用它;甚至没有任何好处,因为UTF-8没有字节顺序问题。 – bobince 2009-09-22 12:48:23
我正在寻找在完全相同的问题,昨天碰到:
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" />
我们使用元标记和asp CharSet属性,但页面仍然没有正确呈现。将其他三行添加到asp文件后,所有工作都完成了。
希望这会有所帮助!
您不需要元标记和'Response.CharSet =“UTF-8”',因为它们都用于相同的目的,我个人更喜欢使用'Response.CharSet =“UTF-8”'而不是明确设置它作为[tag:HTML]中的元标记。另外'Response.AddHeader“Content-Type”,“text/html; charset = UTF-8”'只是写'Response.ContentType =“text/html”'和'Response.CharSet =“的显式形式”UTF- 8“'你所暗示的是毫无意义的,坚持使用'Response.ContentType'和'Response.CharSet'。 – Lankymart 2014-02-05 10:51:34
非常hepfull @Werewolf thx你为你的贡献.. – Artemination 2015-01-16 15:31:51
你救我的生命:) – kyawagwin 2015-08-21 02:15:56
如果您在使用Access数据库,你应该写
Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM table")
如果删除UTF-8 BOM导致页面正确呈现则内容是不是UTF-8肯定? – AnthonyWJones 2009-09-22 06:48:20