IIS集成模式外来字符

Hop*_*ion 6 windows-server-2012 iis-8

好吧,这让我们发疯了。我们有一个在 ASP.NET 4.0 中构建的应用程序,该应用程序在 Windows Server 2012 和 IIS8 上运行。

我们网站的一些页面被翻译成多种语言,尤其是日语和中文是有问题的。

如果我们将应用程序池置于集成模式 - 某些字符将无法正确显示。迎接我们的是小小的问号。

如果我们将应用程序池置于经典模式,则所有字符都可以正确显示。不幸的是,这对我们来说不是一个长期的选择,因为它破坏了网站上的其他功能。

有趣的事情 - 如果我们更改应用程序池中的“启用 32 位应用程序”设置 -> 高级设置,页面仍会显示虚假字符,但它们会错误地显示不同的字符。

最初我们怀疑页面中存在虚假字符或编码问题 - 但我们已经四重检查所有内容并验证所有内容都是 utf-8。将应用程序池切换到 32 位并看到不同的字符显示不正确让我认为 IIS 中可能有问题。

提前感谢您提供任何帮助/见解/经验。

小智 1

这是一个两部分:

来自https://technet.microsoft.com/en-us/library/cc753449%28v=ws.10%29.aspx

“在 IIS 7 中,应用程序池以两种模式之一运行:集成模式和经典模式。应用程序池模式影响服务器处理托管代码请求的方式。如果托管应用程序在集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求。但是,如果托管应用程序在经典模式的应用程序池中运行,则服务器将继续通过 Aspnet_isapi.dll 路由托管代码的请求,处理请求与应用程序在 IIS 6.0 中运行时相同。”

https://forums.iis.net/p/1173138/1962242.aspx

一些遇到类似问题的人针对强制 IIS 7 按照他们想要的方式处理字符集进行了一些修复。其要点是经典/IIS 6 接受您想要的编码,但在管道中的某个位置集成/IIS 7 正在使用其默认编码。

这讨论了如何按照您想要的方式设置编码: /sf/ask/684681021/

你可能想要fiddler/firebug来查看它的运行方式(utf8,当它应该是ISO-8859-1时,反之亦然)。

最后但并非最不重要的一点是,关于 ASP.Net 如何处理全球化问题的名副其实的论文: https://support.microsoft.com/en-us/kb/893663。适用于 2.0,但根据我的经验,很多类似的内容会延续到更高版本,并且可能适用于 4.0。