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

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

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

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

01.08.2012, 20:40. Просмотров 1852. Ответов 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, но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Holsteng
47 / 10 / 3
Регистрация: 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
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:48 #17
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 13:52  [ТС] #18
Цитата Сообщение от alsav22 Посмотреть сообщение
32 - это разница между кодами строчных символов и прописных. Насчёт файла проясните.
Ситуация такая. В файл добавляются названия улиц, и чтобы не было одинаковых улиц, я делаю проверку, что в файле такой улицы нет. НО пользователь может ввести два одинаковых названия в разных регистрах. Вот так вот
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 13:56 #19
C++
1
 wcscpy_s( namestreet,L"");
Эту строчку у меня компилятор не принимает.
checkstreet я так и не увидел.
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 14:02  [ТС] #20
А если _tcscpy? или lstrcpy?. У меня принимает
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 14:08 #21
У вас вот это неправильно задано:
C++
1
TCHAR namestreet[100];
Чтобы принималось это: wcscpy_s(namestreet, L""); , нужно:
C++
1
wchar_t namestreet[100];
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 14:13  [ТС] #22
Спасибо, я думал это одно и тоже
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 14:19 #23
checkstreet это объект struct EditorStreet, понял. Насчёт namestreet. Вы же сами указывали, что
wstring namestreet;
, а массив у вас простых char задан.

Добавлено через 2 минуты
Цитата Сообщение от Holsteng Посмотреть сообщение
Спасибо, я думал это одно и тоже
У нас с вами одинаковые компиляторы (MSVC 2010), не пойму, неужели ваш не выдавал ошибку в этой строчке :
C++
1
wcscpy_s( namestreet,L"");
?
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 14:26  [ТС] #24
Цитата Сообщение от alsav22 Посмотреть сообщение
checkstreet это объект struct EditorStreet, понял. Насчёт namestreet. Вы же сами указывали, что , а массив у вас простых char задан.

Добавлено через 2 минуты

У нас с вами однинаковые компиляторы (MSVC 2010), не пойму, неужели ваш не выдавал ошибку в этой строчке :
C++
1
wcscpy_s( namestreet,L"");
?

Добавлено через 11 секунд

У нас с вами однинаковые компиляторы (MSVC 2010), не пойму, неужели ваш не выдавал ошибку в этой строчке :
C++
1
wcscpy_s( namestreet,L"");
?
У меня в функцию приходит введенное пользователем название улицы, я считываю из файла данные в объект структуры в цикле и проверяю если в файле такое название.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool CableTV::CheckUnicalNameStreet( wstring namestreet, int id)
{
    
    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 );
     
    
    
        fstream FileStreet ( "Streets.dat", ios::binary | ios::in);
        if(!FileStreet)
        {
            ErrorAddClient(L"Невозможно открыть файл \"Streets.dat\"");
            return false;
        }
        FileStreet.seekg( 0 );
        EditorStreet checkstreet;
        FileStreet.read( reinterpret_cast<char *>( &checkstreet ),
            sizeof( EditorStreet ) );
        while(!FileStreet.eof())
        {
            int result = _wcsicmp(checkstreet.namestreet,namestreet.c_str());
            if ( checkstreet.iIdStreet == id || result == 0 )
            {
                ErrorAddClient(L"Идентификатор занят \n или такая улица уже существует!");
                return false;
                break;
            }
            FileStreet.read( reinterpret_cast<char *>( &checkstreet ),
                sizeof( EditorStreet ) );
        }
        return true;
}
Вот код функции.
Ошибок компилятор по поводу функции _wcscpy не выдавал равно как и предупреждений
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 15:01 #25
Цитата Сообщение от Holsteng Посмотреть сообщение
Ошибок компилятор по поводу функции _wcscpy не выдавал равно как и предупреждений
Сейчас как?

Добавлено через 20 минут
Ещё вопрос: зачем вам расширенные символы?
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 15:15  [ТС] #26
Компилятор не выдает ошибок. Я доделываю экзамен по WinApi, а там необходимо применять расширенные символы. Если честно, сам не до конца разобрался с этим
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 15:41 #27
Цитата Сообщение от Holsteng Посмотреть сообщение
Компилятор не выдает ошибок
Я так понял, он и раньше не выдавал. А, код работает?
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 15:45  [ТС] #28
Цитата Сообщение от alsav22 Посмотреть сообщение
Я так понял, он и раньше не выдавал. А, код работает?
В этом плане код работает нормально, сейчас у меня вылезла проблема с файлом, но это никак не связано с этим. Спасибо.

Вижу, Вас этот вопрос с компилятором задел за живое
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 15:54 #29
В структуре используете массив, почему не класс string? Удобнее же. По моему, я нашёл причину, по которой ваш компилятор по другому реагировал на строку с функцией wcscpy_s(namestreet, L""). У вас в Свойстах проекта - Общие - Набор символов, наверное, установленно: Использовать набор символов Юникода? А у меня - нет.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Holsteng Посмотреть сообщение
Вижу, Вас этот вопрос с компилятором задел за живое
Меня всё непонятное задевает за живое.



Добавлено через 4 минуты
Я боюсь советовать, но мне такая информация попадалась, что лучше, в этом свойстве проекта поставить: Не задано. И на вашем примере, я убедился, что к такой информации нужно прислушаться.
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 15:54  [ТС] #30
Код
В структуре используете массив, почему не класс string? Удобнее же.
Я не знаю как записывать string в файл, мне говорили что надо изменять размер при записи в файл и при считывании тоже, не совсем понимаю как это сделать.

Код
Меня всё непонятное задевает за живое.
Тогда помогите здесь! Флаги при работе с бинарными файлами Спасибо

Вы правы в свойствах стояло использовать Юникод, а и не знал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 15:54
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.08.2012, 15:54
Ответ Создать тему
Опции темы

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