Дано: приложение ASP.Net, которое использует устаревшую библиотеку COM устаревшей библиотеки COM, которая создана без сервера Unicode (MBCS) для Windows 2008 dev, на котором все это работает
Требуется: поддержка пользователей веб-приложений в разных локалях
Тест:
1) Я установил язык системы на сервере на русский и проверил ввод на русском языке.
.NET обрабатывает их как UTF16, передает в COM как BSTR, COM преобразует его в char *, используя ConvertBSTRToString и текущий языковой стандарт (русский), записывает их в файл, читает их в файл, передает обратно в .NETи получаю правильные результаты.
2) Я установил системную локаль обратно на US / English, добавил код либо в приложение ASP.NET, либо в сам COM, чтобы явно установить русскую локаль, локаль установлена успешно (Iзапросить его и получить русский язык назад), COM получает UTF-16 BSTR, использует ConvertBSTRToString для преобразования его в char * и получает вопросительные знаки "???"!
Почему ??В чем разница между настройкой языкового стандарта для всей системы и вызовом setlocale () в процессе?В чем смысл setlocale тогда?ConvertBSTRToString использует что-то отличное от текущей локали?
Я также попытался выполнить
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("ru-RU");
внутри вызывающей стороны ASP.NET объекта COM и попытался выполнить
setlocale(LC_ALL, "Russian");
SetThreadLocale(
MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA), SORT_DEFAULT));
вдоль стороны setlocale () внутриБиблиотека COM;без эффекта.
Буду очень признателен за это!