setlocale () не влияет на ConvertBSTRToString (), но системная настройка влияет? - PullRequest
0 голосов
/ 13 июля 2010

Дано: приложение 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;без эффекта.

Буду очень признателен за это!

1 Ответ

1 голос
/ 13 июля 2010

Из документов неясно, что ConvertBSTRToString () использует для определения текущей локали.Но вы можете быть совершенно уверены, что это , а не локаль CRT, как установлено setlocale ().Вам почти наверняка нужно вызвать SetThreadLocale ().

Используйте WideCharToMultiByte (), чтобы сделать его менее вероятным.

...