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

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

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Почему не выводит текст из файла (CP1251)? - C++

10.11.2013, 15:53. Просмотров 863. Ответов 9
Метки нет (Все метки)

C++
#include <iostream>
#include <fstream>
#include <string>
#include <locale>
using namespace std;
 
int main() 
{ 
    setlocale(LC_ALL,"ru_RU.CP1251");
 
    wifstream wifs("file.txt"); // файл с русскими словами в CP1251
 
    wstring s;
    getline(wifs, s);
 
    wcout << s << endl; // пустота
 
    wifs.close();
}
Bash
locale -a
C
en_US.utf8
POSIX
ru_RU.cp1251
ru_RU.utf8
up!
up!
up!
up!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 15:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не выводит текст из файла (CP1251)? (C++):

Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текст - C++
Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текста

Почему последнюю строку из файла выводит дважды? - C++
привет всем! скажите пожалуйста почему последнюю строку выводит 2 раза? FILE *f; if(!(f = fopen(&quot;keys.txt&quot;,&quot;r&quot;))) ...

Текст в кодировке cp1251 перевести в utf8 и обратно? - C++
Здорова! Вот есть код: #include &lt;iostream&gt; using std::cout; using std::endl; using std::cerr; using std::cin; #include...

Считывает текст с файла и выводит в другой файл - C++
Здравствуйте, уважаемые) По возможности помогите с написанием кода, буду очень благодарен. Условие: Написать программу, которая...

написать программу, которая считывает текст из файла и выводит на экран - C++
написать программу, которая считывает текст из файла и выводит на экран только те предложения, состоящие из заданного количества слов

Программа, которая считывает текст из файла, и выводит на экран только цитаты - C++
Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки. не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
10.11.2013, 16:06 #2
Может из-за регистра?
Croessmah
Модератор
Эксперт CЭксперт С++
13135 / 7398 / 828
Регистрация: 27.09.2012
Сообщений: 18,234
Записей в блоге: 3
Завершенные тесты: 1
10.11.2013, 16:11 #3
попробуйте
C++
1
std::locale::global(std::locale("ru_RU.CP1251"));
вместо setlocale
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 16:26  [ТС] #4
Цитата Сообщение от Croessmah Посмотреть сообщение
std::locale::global(std::locale("ru_RU.CP1251"));
теперь выводит знаки вопроса вместо букв.

Добавлено через 6 минут
Цитата Сообщение от vua72 Посмотреть сообщение
Может из-за регистра?
нет, файл виден.
Croessmah
Модератор
Эксперт CЭксперт С++
13135 / 7398 / 828
Регистрация: 27.09.2012
Сообщений: 18,234
Записей в блоге: 3
Завершенные тесты: 1
10.11.2013, 16:41 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
теперь выводит знаки вопроса вместо букв.
Попробуйте поменять кодировку терминала.

В Ubuntu 12.04
Почему не выводит текст из файла (CP1251)?
Терминал->Установить кодировку символов->Кириллица (WINDOWS-1251)
Почему не выводит текст из файла (CP1251)?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:01  [ТС] #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Попробуйте поменять кодировку терминала.
Спасибо, это сработало.
Croessmah
Модератор
Эксперт CЭксперт С++
13135 / 7398 / 828
Регистрация: 27.09.2012
Сообщений: 18,234
Записей в блоге: 3
Завершенные тесты: 1
10.11.2013, 17:02 #7
еще один глупый костыль:
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
#include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <cstdlib>
using namespace std;
 
int main() 
{
    
    std :: string filePath ( "file.txt" ) ;
    std :: string encodingString ( "iconv -f CP1251 -t UTF8 " + filePath + " > " + filePath + "_utf8") ;
    system ( encodingString.c_str ( ) ) ;//с помощью iconv преобразуем файл в UTF-8
    
    std::locale::global(std::locale("ru_RU.UTF-8"));
    wifstream wifs( filePath + "_utf8" ); // открываем новый файл
 
    wstring s;
    getline(wifs, s);
 
    wcout << s << endl;
    std :: string removeCommand ( "rm " + filePath + "_utf8" ) ;
    system ( removeCommand.c_str ( ) ) ; //удаляем созданный файл
    wifs.close();
}
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:17  [ТС] #8

Не по теме:

Только почему-то xfce-шный эммулятор вылетает при попытке сменить кодировку, а в gnome-вском эммуляторе все работает.



Добавлено через 5 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
еще один глупый костыль
Нет, вполне сгодится

Добавлено через 7 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
wifstream wifs( filePath + "_utf8" );
Небольшая неточность. Надо вот так:
C++
wifstream wifs( (filePath + "_utf8").c_str() );
Croessmah
Модератор
Эксперт CЭксперт С++
13135 / 7398 / 828
Регистрация: 27.09.2012
Сообщений: 18,234
Записей в блоге: 3
Завершенные тесты: 1
10.11.2013, 17:20 #9
Цитата Сообщение от programina Посмотреть сообщение
Небольшая неточность. Надо вот так
В C++11 появился конструктор
C++
1
explicit ifstream (const string& filename, ios_base::openmode mode = ios_base::in);
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:49  [ТС] #10
Цитата Сообщение от Croessmah Посмотреть сообщение
В C++11 появился конструктор
действительно, с опцией -std=c++11 компилируется. Надо взять за правило.

Добавлено через 11 минут
Можно даже сократить, так как в Linux обычно по умолчанию UTF-8

C++
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
 
int main() 
{
    system("iconv -f CP1251 -t UTF8 file.txt > file_utf8.txt");
 
    ifstream ifs("file_utf8.txt");
 
    string s;
    getline(ifs, s);
 
    cout << s << endl;
 
    system("rm file_utf8.txt");
    ifs.close();
}
Добавлено через 9 минут
И тем же макаром можно редактировать файлы, iconv обратно переводит в CP1251
C++
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
 
int main() 
{
    system("iconv -f CP1251 -t UTF8 file.txt > file_utf8.txt");
 
    ofstream ofs;
    string s = "Текст";
 
    ofs.open("file_utf8.txt", ios::app);
    ofs << s;
    ofs.close();
 
    system("iconv -f UTF8 -t CP1251 file_utf8.txt > file.txt");
    system("rm file_utf8.txt");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 17:49
Привет! Вот еще темы с ответами:

Написать программу, которая считывает текст из файла и выводит его на экран - C++
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова. Пожалуйста...

Написать программу, которая считывает текст из файла и выводит его на экран - C++
Вот 5 заданий: 1)Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке. 2)....

Написать программу, которая считывает текст из файла и выводит на экран только цитаты - C++
Вот код: #include &lt;fstream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { clrscr(); ifstream fin(&quot;text.txt&quot;, ios::in...

Написать программу, которая считывает текст из файла и выводит предложения, не содержащие запятых - C++
Здравствуйте. Прошу помощи в написание программу на C++ &quot;Написать программу, которая считывает текст из файла и выводит на экран только...


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

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

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