Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
1

Локализация для Unicode

01.08.2012, 20:40. Просмотров 3635. Ответов 39
Метки нет (Все метки)

Всем привет!

Подскажите как подключить локализацию при работе с Unicode. Для ANSI, насколько я знаю (VS2010)

C
1
setlocale(LC_ALL,"rus");
Проблема в том, что работаю с Unicode и некоторые функции не работают.

Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2012, 20:40
Ответы с готовыми решениями:

Локализация приложений
У кого-нибудь есть на примете материал по локализации приложений(в основном, игр)? Имеется ввиду...

Локализация консоли
Всем привет. Дело такое. Есть программа, которая при определенных условиях должна заменять символ в...

Табуляция и локализация С++
сделать программу локализации кореней которое задано уравнением путем табуляции функции на отрезке...

Русская локализация
На просторах вашего форму нашел, следующий код программы//Подключение библиотек// #include...

39
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 02:42 2
Вроде бы, так :
C++
1
setlocale(0, "rus_rus.866");
1
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
02.08.2012, 03:01 3
Цитата Сообщение от Holsteng Посмотреть сообщение
Подскажите как подключить локализацию при работе с Unicode. Для ANSI, насколько я знаю (VS2010)
вы говорите странные вещи - юникод на то и нужен, чтобы избавиться от локализаций (локализация - по сути выбор нужной кодировки для вывода символов)

Цитата Сообщение от Holsteng Посмотреть сообщение
Проблема в том, что работаю с Unicode и некоторые функции не работают.
какие?
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 11:41  [ТС] 4
Цитата Сообщение от alex_x_x Посмотреть сообщение
вы говорите странные вещи - юникод на то и нужен, чтобы избавиться от локализаций (локализация - по сути выбор нужной кодировки для вывода символов)


какие?
Не работают функции _wcsicmp, towlower и towupper. Мне сказал препод что проблема в подключении локализации. Я с Вами согласен, что это абсурд, но как по - другому?
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:13 5
Среда какая? Пример кода, где не работают.
0
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:23  [ТС] 6
Visual Studio 2010

C
1
2
3
4
5
6
7
8
9
10
void CheckUnicalNameStreet( wstring namestreet)
{
    // namestreet = L"hELLO";
    wcscpy_s(value,namestreet.c_str());
   namestreet[ 0 ] = toupper( namestreet[ 0 ] );
   std::wstring::iterator registr;
    for( registr = namestreet.begin() + 1; registr != namestreet.end(); ++registr   )
     
       *registr = tolower( *registr );
}
C
1
int result = _wcsicmp(checkstreet.namestreet,namestreet.c_str());
где
C
1
2
checkstreet.namestreet - TCHAR [100];
wstring namestreet;
Что я заметил, когда инициализируешь вот так

C
1
namestreet = L"hELLO";
все работает корректно

а когда берем фактический параметр не работает. Ошибки нет, предупреждений тоже. Прохожу отладчиком, строка не изменяется, остается неизменной.

Функция
C
1
_wcsicmp
две одинаковых строки выдает вместо 0 число.

Заранее спасибо
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:50 7
Цитата Сообщение от Holsteng Посмотреть сообщение
_wcsicmp
С этой функцией напишите, как выглядит код, когда число возвращает. Типа этого:
C++
1
cout << _wcsicmp(L"ffff", L"ffff");
Добавлено через 10 минут
Если так работает, то функция работает. Дело, может, в другом. Как параметры передаёте, и какие. По коду я не могу понять. Это куски, что там чем является не понять (checkstreet ?).
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:51  [ТС] 8
C
1
int result = _wcsicmp(L"Кирова",L"КироВА");
- один из случаев, если я Вас правильно понял...
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:55 9
Цитата Сообщение от Holsteng Посмотреть сообщение
int result = _wcsicmp(L"Кирова",L"КироВА")
И что он у вас выдаёт? 32?
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:55  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
С этой функцией напишите, как выглядит код, когда число возвращает. Типа этого:
C++
1
cout << _wcsicmp(L"ffff", L"ffff");
Добавлено через 10 минут
Если так работает, то функция работает. Дело, может, в другом. Как параметры передаёте, и какие. По коду я не могу понять. Это куски, что там чем является не понять (checkstreet ?).
C
1
CheckUnicalNameStreet( namestreet );
wstring namestreet;
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:07 11
Цитата Сообщение от Holsteng Посмотреть сообщение
wstring namestreet;
namestreet я вижу. Я про checkstreet интересовался.
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:09  [ТС] 12
Да выдает 32

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
namestreet я вижу. Я про checkstreet интересовался.

checkstreet.namestreet - это поле прочитанной из файла структуры, TCHAR [100]
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:15 13
Цитата Сообщение от Holsteng Посмотреть сообщение
Да выдает 32
А что, по вашему, должно?
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:22  [ТС] 14
Я так понимаю 0 - если строки равны, -1 если первая строка меньше второй, 1 первая строка больше второй
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:27 15
Строка s1 меньше строки s2 <0
Строка s1 равна строке s2 0
Строка s1 больше строки s2 >0
Делаем вывод, что функция у вас работает. Хотелось бы на структуру посмотреть. Я так понял, что данные в стуктуру вы считываете из файла?
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:30  [ТС] 16
Цитата Сообщение от alsav22 Посмотреть сообщение
Строка s1 меньше строки s2 <0
Строка s1 равна строке s2 0
Строка s1 больше строки s2 >0
Делаем вывод, что функция у вас работает. Хотелось бы на структуру посмотреть. Я так понял, что данные в стуктуру вы считываете из файла?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct EditorStreet
    {
    public:
        EditorStreet()
        {
            iIdStreet=0;
            
            wcscpy_s( namestreet,L"");
        }
        INT iIdStreet;// идентификатор улицы
        TCHAR namestreet[100];// название улицы
        
        
    };
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:48 17
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
1
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:52  [ТС] 18
Цитата Сообщение от alsav22 Посмотреть сообщение
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Ситуация такая. В файл добавляются названия улиц, и чтобы не было одинаковых улиц, я делаю проверку, что в файле такой улицы нет. НО пользователь может ввести два одинаковых названия в разных регистрах. Вот так вот
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:56 19
C++
1
 wcscpy_s( namestreet,L"");
Эту строчку у меня компилятор не принимает.
checkstreet я так и не увидел.
0
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 14:02  [ТС] 20
А если _tcscpy? или lstrcpy?. У меня принимает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2012, 14:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не работает локализация для контекстного меню
Добавил на форму элемент &quot;ContextMenuStrip&quot;. Добавил элементы этого меню на английском. Далее в...

Как Консольное-приложение в Lazarus сдружить c кодировкой Unicode или Unicode Big Endian или UTF-8
Нужно чтобы Lazarus отображал символы псевдографики желательно все, но в основном вот эти......

Nero Multimedia Suite 10 для продажи в России - английская локализация
Здравствуйте! Достался Nero Multimedia Suite 10 - не распакованный DVD для продажи в России, хочу...

base64_encode для символов Unicode из MSSQL
Добрый день! Существует база MSSQL. Из неё скриптом вытягиваются данные. Строка типа: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.