Хорошо, это сводит нас с ума. У нас есть приложение, построенное на ASP.NET 4.0, работающее на Windows Server 2012 и IIS8.
Некоторые страницы нашего сайта переведены на несколько языков, в частности, на японский и китайский языки проблематичны.
Если перевести пул приложений в интегрированный режим - некоторые символы отображаются некорректно. Нас встречают небольшими вопросительными знаками.
Если мы переведем пул приложений в классический режим, все символы отображаются правильно. К сожалению, это не долгосрочный вариант для нас, поскольку он нарушает другие функции сайта.
Забавная вещь - если мы изменим параметр «Включить 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
Вы, вероятно, захотите поиграть в скрипт / firebug, чтобы увидеть, в каком направлении это происходит (utf8, когда это должен быть ISO-8859-1, или наоборот).
И последнее, но не менее важное: настоящий трактат о том, как ASP.Net решает проблемы глобализации: https://support.microsoft.com/en-us/kb/893663. Предназначен для 2.0, но, по моему опыту, многие подобные вещи переносятся в более поздние версии и, вероятно, применимы к 4.0.