На данный вопрос уже ответили:
Каким образом прочитать данные(и вывести в консоль), чтобы строка была нормальной без escape символов и чтобы отдельные слова не заменялись кодировкой байт, например Подключе\u00ADие. В чем вообще проблема?
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess *console = new QProcess();
QStringList aList;
console->start( "ipconfig" );
QByteArray aOut;
if( console->waitForFinished( ) == true )
{
aOut = console->readAllStandardOutput();
}
QTextCodec *codec = QTextCodec::codecForName( "Windows-1251" );
QString sOut = codec->toUnicode( aOut );
qDebug() << sOut;
return a.exec();
}
Терминал в винде (если никто ничего не трогал), работает в кодировке 866. Она отлична от кодировок cp1251 и юникода. В своем оригинальном коде Вы пытаетесь декодировать 866 кодировку как cp1251 в юникод (это уже интересно) и результат выводите на экран, где он интерпретируется как 866. Скорее всего, преобразование прошло частично и только повредило некоторые символы, и вывод удался (почти).
Благодаря Майкрософту, который со всех сил пытается делать суперсовместимость, внутри винды живет несколько несовместимых кодировок, о которых нужно помнить. Терминал работает в 866 (старая досовская кодировка). Qt в основном использует юникод (как и ядро современной винды). cp1251 используют в основном старые программы и сейчас она потихоньку отходит в мир иной.
Поэтому, скорее всего, что бы работать правильно, нужно весь ввод конвертировать себе в юникод. А когда нужно вывести - конвертировать в 866 назад.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей