Дано: приложение ASP.Net, которое использует устаревшую библиотеку COM устаревшую библиотеку COM, которая построена без Unicode (MBCS) на сервере разработки Windows 2008, на котором все это работает.
Требуется: поддержка пользователей веб-приложений в разных регионах
Контрольная работа:
1) Я установил на сервере локаль системы на русский язык и протестировал русские входы.
.NET обрабатывает их как UTF16, передает COM как BSTR, COM преобразует их в char *, используя ConvertBSTRToString и текущую локаль (русский язык), записывает их в файл, читает их в файл, передает обратно в .NET и получает правильные результаты.
2) Я устанавливаю языковой стандарт системы обратно на США / английский, добавляю код либо в приложение ASP.NET, либо в сам COM, чтобы явно установить языковой стандарт на русский язык, языковой стандарт установлен успешно (я запрашиваю его и возвращаю русский язык), 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; нет эффекта.
Я был бы очень признателен за информацию по этому поводу!