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

Проблемы с кодировкой - C++

Восстановить пароль Регистрация
 
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
12.02.2013, 10:42     Проблемы с кодировкой #1
Проблема в следующем:
Нужно сравнить два слова на русском языке. Одно - читается с текстового файла, другое вводится с консоли.
Понимаю, что нужно переключать кодировки...
типа: setlocale(0,""); и setlocale(0, ".OCP");
Но это не помогает. Как бы не менял кодировки, одинаковые русские слова в файле и с консоли понимаются. как различные.
Подскажите чего и где тут изменить, добавить (в смысле кодировок), чтобы код работал правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <fstream>
    using namespace std;
    int main()
    {
    string a,b;
    setlocale (0,"");
    cin >> a;
    
    ifstream f("1.txt");
    f >> b;
    f.close();
    
    if (a==b) cout << 1;
    else cout << 0;
 
    return 0;
    }
setlocale я поудалял, поскольку нужного результата не добился.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
12.02.2013, 11:16     Проблемы с кодировкой #2
Верни локаль на русскую, и попробуй использовать вместо string - wstring, вместо cin - wcin, и т. д.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
12.02.2013, 11:28  [ТС]     Проблемы с кодировкой #3
Результат не изменился.
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
#include <iostream>
#include <string>
#include <fstream>
 
 
    using namespace std;
    int main()
    {
    wstring a,b;
    wcin >> a;
    
 
    
    wifstream f("1.txt");
    f >> b;
    f.close();
 
    
    if (a==b) cout << 1;
    else cout << 0;
 
 
    return 0;
    }
Пробовал текстовый файл сохранять в кодировках ANSI, UTF-8, Юникод... Результат не меняется. Одинаковые русские слова не сравниваются...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
12.02.2013, 11:32     Проблемы с кодировкой #4
LVV, ось какая?


под винду можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
    using namespace std;
    int main()
    {
    string a,b;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cin >> a;
    
    ifstream f("1.txt");
    f >> b;
    f.close();
    
    if (a==b) cout << 1;
    else cout << 0;
 
    return 0;
    }
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
12.02.2013, 11:57  [ТС]     Проблемы с кодировкой #5
Спасибо, Croessmah. Правда, решая одну проблему создаём новые (с выводом на экран). Но, главное, я понял идею, а дальше разберусь...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
12.02.2013, 11:58     Проблемы с кодировкой #6
Цитата Сообщение от LVV Посмотреть сообщение
с выводом на экран
шрифт Lucida Console
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 11:59     Проблемы с кодировкой
Еще ссылки по теме:

C++ Проблемы с кодировкой при подключении текстового файла
C++ Программа не обрабатывает текст из файла с кодировкой, отличной от ANSI
C++ Проблемы с кодировкой символов

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

Или воспользуйтесь поиском по форуму:
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
12.02.2013, 11:59     Проблемы с кодировкой #7
Другая идея. Можно перекодировать после ввода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
    using namespace std;
    int main()
    {
    string a,b;
    setlocale (0,"");
    cin >> a;
    char buff[100];
    OemToCharA(a.c_str(),buff);
    
    ifstream f("1.txt");
    f >> b;
    f.close();
    
    if (buff==b) cout << 1;
    else cout << 0;
 
    return 0;
    }
Yandex
Объявления
12.02.2013, 11:59     Проблемы с кодировкой
Ответ Создать тему
Опции темы

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