CString::LoadString и Regional options
От: prozaeck  
Дата: 19.02.10 17:39
Оценка:
Имеется тестовое приложение с MFC, не unicode
Имеется код:
    CString    str;
    str.LoadString ( IDS_TEST1 );

IDS_TEST1 — строка на русском.

Код работает.
Идем в панель управления, Regional and language options, Закладка Regional options (первая), в верхнем комбобоксе выбираем латышский язык (Latvian).

Теперь в str загружаются знаки вопроса.

1. Это что, так и должно быть?

Отладка показала, что лажает функция WideCharToMultiByte. Похоже, строки в ресурсах хранятся в двухбайтовой кодировке, и эта функция должна их законвертить в однобайтовую. Видимо она не может найти двухбайтовые коды русских символов в латышской таблице, и поэтому заменяет их вопросами.

2. Как с этим бороться?
::setlocale( LC_ALL, "Russian_Russia.ACP" );

не помогает.
Re: CString::LoadString и Regional options
От: Jenkas Россия  
Дата: 04.03.10 18:37
Оценка:
Здравствуйте, prozaeck, Вы писали:

P>Имеется тестовое приложение с MFC, не unicode

P>Имеется код:
P>
P>    CString    str;
P>    str.LoadString ( IDS_TEST1 );
P>

P>IDS_TEST1 — строка на русском.

Для того что бы хранить в CString текст не совместимый с системным локалом нужно переходить на Юникодную модель программы.
Если объявишь вместо CString -> CStringW то как минимум в дебаге должно отработать. Но если диалоги и всё остальное не юникодное, то дальше чем этот стринг твой юникод не уйдёт...
юникод cstring
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.