我有一个在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页面,乱码字符会改变,偶尔也不会出现。
答案 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 /物理访问,而且它只能解决错误。不是出现错误的原因。