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

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

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

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

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

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

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


какие?
Не работают функции _wcsicmp, towlower и towupper. Мне сказал препод что проблема в подключении локализации. Я с Вами согласен, что это абсурд, но как по - другому?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:13     Локализация для Unicode #5
Среда какая? Пример кода, где не работают.
Holsteng
 Аватар для 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
5282 / 4801 / 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
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 12:51  [ТС]     Локализация для Unicode #8
C
1
int result = _wcsicmp(L"Кирова",L"КироВА");
- один из случаев, если я Вас правильно понял...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 12:55     Локализация для Unicode #9
Цитата Сообщение от Holsteng Посмотреть сообщение
int result = _wcsicmp(L"Кирова",L"КироВА")
И что он у вас выдаёт? 32?
Holsteng
 Аватар для 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:07     Локализация для Unicode #11
Цитата Сообщение от Holsteng Посмотреть сообщение
wstring namestreet;
namestreet я вижу. Я про checkstreet интересовался.
Holsteng
 Аватар для 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:15     Локализация для Unicode #13
Цитата Сообщение от Holsteng Посмотреть сообщение
Да выдает 32
А что, по вашему, должно?
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:22  [ТС]     Локализация для Unicode #14
Я так понимаю 0 - если строки равны, -1 если первая строка меньше второй, 1 первая строка больше второй
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:27     Локализация для Unicode #15
Строка s1 меньше строки s2 <0
Строка s1 равна строке s2 0
Строка s1 больше строки s2 >0
Делаем вывод, что функция у вас работает. Хотелось бы на структуру посмотреть. Я так понял, что данные в стуктуру вы считываете из файла?
Holsteng
 Аватар для 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:48     Локализация для Unicode #17
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:52  [ТС]     Локализация для Unicode #18
Цитата Сообщение от alsav22 Посмотреть сообщение
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Ситуация такая. В файл добавляются названия улиц, и чтобы не было одинаковых улиц, я делаю проверку, что в файле такой улицы нет. НО пользователь может ввести два одинаковых названия в разных регистрах. Вот так вот
alsav22
5282 / 4801 / 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++
C++ C++ и Unicode
C++ Unicode в c++

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

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

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru