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

Der*_*ins 15 iis-6 utf-8 asp-classic

我们有一个使用Classic ASP的网站.

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

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

如果我们然后删除说明此文件是UTF-8的BOM,那么之前呈现为垃圾的文本现在可以正确显示.

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

Wer*_*olf 17

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

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"
Run Code Online (Sandbox Code Playgroud)

和以下HTML META标记:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!

  • 你不需要meta标签和`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`. (2认同)

bob*_*nce 8

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

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

Content-Type: text/html;charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)

和/或HTML中的元元素

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)

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