Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
#1

Локализация для Unicode - C++

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

Всем привет!

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

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

Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2012, 20:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Локализация для Unicode (C++):

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

Табуляция и локализация С++ - C++
сделать программу локализации кореней которое задано уравнением путем табуляции функции на отрезке -20 и 20 с шагом h=0.2 что-то не так...

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

Табуляция и локализация корней - C++
сделать программу локализации кореней которое задано уравнением путем табуляции функции на отрезке -20 и 20 с шагом h=0.2 что-то не так...

Как работает локализация в C++ - C++
Здравствуйте, появился вопросы. В заголовочном файле <locale> определены функции isalpha, ... ,tolower, toupper; которые в зависимости от...

Локализация(интеренационализация) приложения VC++ - C++
Извиняюсь за столь примитивный вопрос, но все таки может кто-то просветит как это сделать. В MSDN нашел как это делать только через DLL, но...

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

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


какие?
Не работают функции _wcsicmp, towlower и towupper. Мне сказал препод что проблема в подключении локализации. Я с Вами согласен, что это абсурд, но как по - другому?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:13 #5
Среда какая? Пример кода, где не работают.
0
Holsteng
47 / 10 / 3
Регистрация: 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
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:50 #7
Цитата Сообщение от Holsteng Посмотреть сообщение
_wcsicmp
С этой функцией напишите, как выглядит код, когда число возвращает. Типа этого:
C++
1
cout << _wcsicmp(L"ffff", L"ffff");
Добавлено через 10 минут
Если так работает, то функция работает. Дело, может, в другом. Как параметры передаёте, и какие. По коду я не могу понять. Это куски, что там чем является не понять (checkstreet ?).
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:51  [ТС] #8
C
1
int result = _wcsicmp(L"Кирова",L"КироВА");
- один из случаев, если я Вас правильно понял...
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:55 #9
Цитата Сообщение от Holsteng Посмотреть сообщение
int result = _wcsicmp(L"Кирова",L"КироВА")
И что он у вас выдаёт? 32?
1
Holsteng
47 / 10 / 3
Регистрация: 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
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:07 #11
Цитата Сообщение от Holsteng Посмотреть сообщение
wstring namestreet;
namestreet я вижу. Я про checkstreet интересовался.
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:09  [ТС] #12
Да выдает 32

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

checkstreet.namestreet - это поле прочитанной из файла структуры, TCHAR [100]
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:15 #13
Цитата Сообщение от Holsteng Посмотреть сообщение
Да выдает 32
А что, по вашему, должно?
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:22  [ТС] #14
Я так понимаю 0 - если строки равны, -1 если первая строка меньше второй, 1 первая строка больше второй
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:27 #15
Строка s1 меньше строки s2 <0
Строка s1 равна строке s2 0
Строка s1 больше строки s2 >0
Делаем вывод, что функция у вас работает. Хотелось бы на структуру посмотреть. Я так понял, что данные в стуктуру вы считываете из файла?
1
02.08.2012, 13:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 13:27
Привет! Вот еще темы с ответами:

Локализация Файлового ввода вывода - C++
Добрый день. Столкнулся с некоторой проблемой. с помощью setlocale(LC_ALL,&quot;Rus&quot;) Ввод с клавиатуры и вывод на экран работает...

Локализация точки в произвольном многоугольнике - C++
Помогите пожалуйста..Надо в близжайшие 5-6 часов.....BorlandC 309-153-594 ася oksy_@list.ru Множество точек определяет многоугольник....

Локализация, русский текст выводит иероглифы - C++
Не могу понять почему когда ввожу русский текст выводит иероглифы А тот что в программе нормально показывает #include &lt;iostream&gt; ...

Решение уравнения методом Ньютона. Локализация корня - C++
Собственно, программа имеется, все довольно таки просто, но необходимо локализовать корень и найти именно положительный корень уравнения. Я...


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

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

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