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

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

Восстановить пароль Регистрация
 
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 15:53     Почему не выводит текст из файла (CP1251)? #1
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++ Почему последнюю строку из файла выводит дважды?
Считывает текст с файла и выводит в другой файл C++
C++ Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текст
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
10.11.2013, 16:06     Почему не выводит текст из файла (CP1251)? #2
Может из-за регистра?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
10.11.2013, 16:11     Почему не выводит текст из файла (CP1251)? #3
попробуйте
C++
1
std::locale::global(std::locale("ru_RU.CP1251"));
вместо setlocale
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 16:26  [ТС]     Почему не выводит текст из файла (CP1251)? #4
Цитата Сообщение от Croessmah Посмотреть сообщение
std::locale::global(std::locale("ru_RU.CP1251"));
теперь выводит знаки вопроса вместо букв.

Добавлено через 6 минут
Цитата Сообщение от vua72 Посмотреть сообщение
Может из-за регистра?
нет, файл виден.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
10.11.2013, 16:41     Почему не выводит текст из файла (CP1251)? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
теперь выводит знаки вопроса вместо букв.
Попробуйте поменять кодировку терминала.

В Ubuntu 12.04
Почему не выводит текст из файла (CP1251)?
Терминал->Установить кодировку символов->Кириллица (WINDOWS-1251)
Почему не выводит текст из файла (CP1251)?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:01  [ТС]     Почему не выводит текст из файла (CP1251)? #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Попробуйте поменять кодировку терминала.
Спасибо, это сработало.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
10.11.2013, 17:02     Почему не выводит текст из файла (CP1251)? #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
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:17  [ТС]     Почему не выводит текст из файла (CP1251)? #8

Не по теме:

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



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

Добавлено через 7 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
wifstream wifs( filePath + "_utf8" );
Небольшая неточность. Надо вот так:
C++
wifstream wifs( (filePath + "_utf8").c_str() );
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
10.11.2013, 17:20     Почему не выводит текст из файла (CP1251)? #9
Цитата Сообщение от programina Посмотреть сообщение
Небольшая неточность. Надо вот так
В C++11 появился конструктор
C++
1
explicit ifstream (const string& filename, ios_base::openmode mode = ios_base::in);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 17:49     Почему не выводит текст из файла (CP1251)?
Еще ссылки по теме:

Написать программу, которая считывает текст из файла и выводит на экран только цитаты C++
Программа, которая считывает текст из файла, и выводит на экран только цитаты C++
C++ Текст в кодировке cp1251 перевести в utf8 и обратно?

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

Или воспользуйтесь поиском по форуму:
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.11.2013, 17:49  [ТС]     Почему не выводит текст из файла (CP1251)? #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");
}
Yandex
Объявления
10.11.2013, 17:49     Почему не выводит текст из файла (CP1251)?
Ответ Создать тему
Опции темы

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