Вывод в консоль кирилицы [дубликат]

403
20 октября 2017, 14:51

На данный вопрос уже ответили:

  • Русский язык в консоли 2 ответа

Каким образом прочитать данные(и вывести в консоль), чтобы строка была нормальной без 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();
    }

Answer 1

Терминал в винде (если никто ничего не трогал), работает в кодировке 866. Она отлична от кодировок cp1251 и юникода. В своем оригинальном коде Вы пытаетесь декодировать 866 кодировку как cp1251 в юникод (это уже интересно) и результат выводите на экран, где он интерпретируется как 866. Скорее всего, преобразование прошло частично и только повредило некоторые символы, и вывод удался (почти).

Благодаря Майкрософту, который со всех сил пытается делать суперсовместимость, внутри винды живет несколько несовместимых кодировок, о которых нужно помнить. Терминал работает в 866 (старая досовская кодировка). Qt в основном использует юникод (как и ядро современной винды). cp1251 используют в основном старые программы и сейчас она потихоньку отходит в мир иной.

Поэтому, скорее всего, что бы работать правильно, нужно весь ввод конвертировать себе в юникод. А когда нужно вывести - конвертировать в 866 назад.

READ ALSO
emit Qt signal from std::thread

emit Qt signal from std::thread

Суть вопроса в следующем, при выборе ConnectionType::QueuedConnection ничего не работает, при выборе ConnectionType::DirectConnection методы первого класса начинают вызываться,...

360
Ускорение ввода/вывода в с++

Ускорение ввода/вывода в с++

Доброго времени суток! Ситуация такова: имеется код на с++ для решения некторой задачиПри отправке решения в систему-проверяльщик, один из тестов...

315
Поиск k-ой порядковой статистики

Поиск k-ой порядковой статистики

ЗдравствуйтеПомогите найти пожалуйста ошибку в реализации поиска k-ого элемента в массиве по неубыванию для чисел значение которых равно...

316
Правильно ли реализован шаблон?

Правильно ли реализован шаблон?

Работает как очистка памяти и все остальные шаблоны, без указания размера и типа, но правильно ли реализованы сами шаблоны?

264