ASP.NET站点移动到IIS7会导致页面输出中出现乱码

时间:2009-06-26 02:10:44

标签: asp.net iis iis-7 windows-server-2008

我有一个在Windows Server 2003 / IIS6上运行良好的ASP.NET站点。

我将其移至Windows Server 2008 / IIS7,aspx页面输出现在包含乱码文本。

例如:

P

大部分页面呈现正确,但这里和那里都有胡言乱语。 我检查了事件日志,没有任何内容。

知道这里发生了什么吗? 我该如何解决这个问题?

我注意到当我在aspx代码中包含多个Server.Execute语句时会出现此问题:

<% Server.Execute("/inc/top.inc"); %>

<% Server.Execute("/inc/footer.inc"); %>

上面的.inc文件只包含html。看起来文件必须具有很长的长度才能导致错误。以下是我一直在测试的示例html:

<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>
<div class="logo">
  <a href="/">
    <img src="/logo.png" alt="logo" width="31" height="29" class="logoimg" />
  </a>
</div>

此外,乱码字符显得不一致。如果我按Ctrl + F5页面,乱码字符会改变,偶尔也不会出现。

10 个答案:

答案 0 :(得分:1)

http://forums.asp.net/p/329153/330330.aspx包含对类似问题的讨论,我想知道你遇到的问题是否相同。以下是rox.scott回答的摘录:

如果您在设置Response.Type等之后转移页面的执行,则生成的Response将具有由初始页面设置的Response.Type和编码 - 这可能与字符不兼容在第二页。 解决方案:确保在两个页面上正确指定响应类型和编码。

想尝试一下,看看它是否有效?

如果这不起作用,http://msdn.microsoft.com/en-us/library/39d1w2xf.aspx对各种配置选项进行了有趣的讨论,您可以尝试在整个站点中强制执行一致的编码。你可能想尝试一些。此外,该MSDN文章不使用ContentType指令,而是建议:

<%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %> 

不确定这是否会产生与调整ContentType相同的结果,但它很容易尝试。

答案 1 :(得分:1)

您也可以在web.config中检查全球化元素 它必须在system.web部分:

<globalization
    requestEncoding="utf-8"
    responseEncoding="utf-8"
    fileEncoding="utf-8"
    responseHeaderEncoding="utf-8" 
/>

答案 2 :(得分:1)

弹出到Firefox并尝试手动切换页面编码(可能首先是Windows-1252),看看是否清除了乱码。如果它突然可读,那么至少你会知道这是一个编码问题。

我还建议在十六进制编辑器中查看输出,看看你实际得到了什么。这也可以给你一个线索在哪里看。可能还会尝试关闭gzip编码或页面压缩。

答案 3 :(得分:1)

这与编码无关。如果您将错误消息与虚拟目录结合使用,则IIS不知道如何处理错误消息。我的猜测是,如果您在计算机上的本地调试中运行此站点,则错误消息显示正常。试试这个,如果是的话,你可以开始推断出实际错误的位置。

答案 4 :(得分:1)

我们永远无法解决这个问题。

唯一有效的解决方案是不使用Server.Execute()。

答案 5 :(得分:1)

我敢打赌,问题在于您所看到的是常规错误页面,gzip-compressed。但是,当服务器重定向到错误页面时,gzip压缩HTTP标头丢失,因此浏览器不知道要解压缩它。你有一些正在进行压缩的自定义模块吗?你在设置Response.Filter吗?

答案 6 :(得分:0)

尝试设置charset参数。

<% Page ContentType="text/html; charset=utf-8"%>

答案 7 :(得分:0)

这有点刺,但尝试在IIS中将管道模式设置为“经典”。

答案 8 :(得分:0)

您可能发送的编码与.inc文件的编码不同。

检查.aspx.inc文件的编码,并检查发送到浏览器的charset标头的content-type参数。

编辑:由于服务器正在发送UTF-8,您应该将.inc文件转换为UTF-8。

为此,请在Visual Studio中打开文件,单击“文件”,“高级保存选项”,然后选择Unicode (UTF-8 without signature) - Codepage 65001。 (靠近列表底部)

答案 9 :(得分:-1)

在Windows事件查看器中,您最有可能找到错误的真正原因。这样你就可以修复它。

不幸的是,您需要对服务器进行RPD /物理访问,而且它只能解决错误。不是出现错误的原因。