Сообщение Re[3]: проблема с std::ifstream::open от 30.09.2016 18:48
Изменено 30.09.2016 18:50 _niko_
Здравствуйте, _hum_, Вы писали:
__>теперь переделал на
__>
__>заработало. но такой код вообще переносим (меня смущает конвертация из QString в std::wstring)?
На 99% уверен что проблемы была в кодировке, ибо вот:
__>теперь переделал на
__>
__>QString qsFullFileName = QFileDialog::getOpenFileName(...);
__>if(!qsFullFileName.isEmpty())
__> {
__> //---
__> std::ifstream ifs;
__> ifs.open(qsFullFileName.toStdWString());
__>
__>заработало. но такой код вообще переносим (меня смущает конвертация из QString в std::wstring)?
На 99% уверен что проблемы была в кодировке, ибо вот:
QString qsFullFileName;
// Если исходный файл в кодировке: utf-8
qsFullFileName = QString::fromUtf8(R"(D:\work\Книги\test.txt)");
qsFullFileName = QTextCodec::codecForName("UTF8")->toUnicode(R"(D:\work\Книги\test.txt)");
// Если исходный файл в кодировке: Windows-1251
qsFullFileName = QTextCodec::codecForName("CP1251")->toUnicode(R"(D:\work\Книги\test.txt)");
std::ifstream ifs;
ifs.open(qsFullFileName.toLocal8Bit());
// Если код исполняется на ОС Windows (запуск из explorer'а, IDE)
ifs.open(QTextCodec::codecForName("CP1251")->fromUnicode(qsFullFileName));
// Если код исполняется на ОС Windows (запуск из CMD)
ifs.open(QTextCodec::codecForName("IBM866")->fromUnicode(qsFullFileName));
std::cout << "open = " << std::boolalpha << ifs.is_open() << std::endl;
Re[3]: проблема с std::ifstream::open
Здравствуйте, _hum_, Вы писали:
__>теперь переделал на
__>
__>заработало. но такой код вообще переносим (меня смущает конвертация из QString в std::wstring)?
На 99% уверен что проблемы была в кодировке, ибо вот:
__>теперь переделал на
__>
__>QString qsFullFileName = QFileDialog::getOpenFileName(...);
__>if(!qsFullFileName.isEmpty())
__> {
__> //---
__> std::ifstream ifs;
__> ifs.open(qsFullFileName.toStdWString());
__>
__>заработало. но такой код вообще переносим (меня смущает конвертация из QString в std::wstring)?
На 99% уверен что проблемы была в кодировке, ибо вот:
QString qsFullFileName;
// Если исходный файл в кодировке: utf-8
qsFullFileName = QString::fromUtf8(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");
qsFullFileName = QTextCodec::codecForName("UTF8")->toUnicode(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");
// Если исходный файл в кодировке: Windows-1251
qsFullFileName = QTextCodec::codecForName("CP1251")->toUnicode(R"(d:\WORK\!!!!!статья — блабла\programma\projs\conception\file)");
std::ifstream ifs;
ifs.open(qsFullFileName.toLocal8Bit());
// Если код исполняется на ОС Windows (запуск из explorer'а, IDE)
ifs.open(QTextCodec::codecForName("CP1251")->fromUnicode(qsFullFileName));
// Если код исполняется на ОС Windows (запуск из CMD)
ifs.open(QTextCodec::codecForName("IBM866")->fromUnicode(qsFullFileName));
std::cout << "open = " << std::boolalpha << ifs.is_open() << std::endl;