Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Всем привет!

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

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

Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2012, 20:40     Локализация для Unicode
Посмотрите здесь:

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

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

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

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

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

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

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

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


какие?
Не работают функции _wcsicmp, towlower и towupper. Мне сказал препод что проблема в подключении локализации. Я с Вами согласен, что это абсурд, но как по - другому?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:13     Локализация для Unicode #5
Среда какая? Пример кода, где не работают.
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:23  [ТС]     Локализация для Unicode #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 число.

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

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

checkstreet.namestreet - это поле прочитанной из файла структуры, TCHAR [100]
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:15     Локализация для Unicode #13
Цитата Сообщение от Holsteng Посмотреть сообщение
Да выдает 32
А что, по вашему, должно?
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:22  [ТС]     Локализация для Unicode #14
Я так понимаю 0 - если строки равны, -1 если первая строка меньше второй, 1 первая строка больше второй
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:27     Локализация для Unicode #15
Строка s1 меньше строки s2 <0
Строка s1 равна строке s2 0
Строка s1 больше строки s2 >0
Делаем вывод, что функция у вас работает. Хотелось бы на структуру посмотреть. Я так понял, что данные в стуктуру вы считываете из файла?
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:30  [ТС]     Локализация для Unicode #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];// название улицы
        
        
    };
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:48     Локализация для Unicode #17
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:52  [ТС]     Локализация для Unicode #18
Цитата Сообщение от alsav22 Посмотреть сообщение
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Ситуация такая. В файл добавляются названия улиц, и чтобы не было одинаковых улиц, я делаю проверку, что в файле такой улицы нет. НО пользователь может ввести два одинаковых названия в разных регистрах. Вот так вот
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:56     Локализация для Unicode #19
C++
1
 wcscpy_s( namestreet,L"");
Эту строчку у меня компилятор не принимает.
checkstreet я так и не увидел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 14:02     Локализация для Unicode
Еще ссылки по теме:

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

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

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

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

C++ и Unicode - C++
Всем привет. Читая про кодовые точки в Java, мне стало интересно как с этим дела в C++. Т.е. для обычного ASCII мы используем char (1...

Unicode в c++ - C++
Нужно вывести в консоли символ: \ Просто так сделать это нельзя, решил использовать Unicode. Код символа в Unicode : \u005C Как...


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

Или воспользуйтесь поиском по форуму:
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 14:02  [ТС]     Локализация для Unicode #20
А если _tcscpy? или lstrcpy?. У меня принимает
Yandex
Объявления
02.08.2012, 14:02     Локализация для Unicode
Ответ Создать тему
Опции темы

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