我们网站的几页翻译成多种语言,特别是日语和中文是有问题的.
如果我们将应用程序池置于集成模式 – 某些字符无法正确显示.我们受到了很少的问号.
如果我们将应用程序池置于经典模式,则所有字符都会正确显示.不幸的是,这不是我们的长期选择,因为它打破了网站上的其他功能.
有趣的事情 – 如果我们更改应用程序池中的“启用32位应用程序”设置 – >高级设置页面仍然显示虚假字符,但它们不正确地显示不同的字符.
最初我们怀疑页面中存在伪造字符或编码问题 – 但我们已经检查了所有内容,并验证了所有内容都是utf-8.将应用程序池切换到32位并看到不正确的字符显示错误导致我认为IIS中可能出现了问题.
在此先感谢您的任何帮助/见解/体验.
从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中的某个地方使用其默认编码.
这里讨论了如何按照你想要的方式设置编码:https://stackoverflow.com/questions/9781157/how-to-set-iis-websites-default-encoding
你可能想要fiddler / firebug的东西来看看它的走向(utf8应该是ISO-8859-1,反之亦然).
最后但并非最不重要的,关于ASP.Net如何处理全球化问题的真实论文:https://support.microsoft.com/en-us/kb/893663.是2.0,但根据我的经验,许多类似的东西延续到更高版本,可能适用于4.0.