LINUX.ORG.RU

kdesudo в какой кодировке возвращает символы

 ,


0

1

Хорошего кода всем! Краткий вопрос по сабжу : как отобразить правильно QProcess.readAll(), чтобы без кракозябр? Консоль в UTF-8(echo $LANG == ru_RU.UTF-8). Просто выводить QByteArray не работает, конвертирование в QString тоже не срабатывает.

Испытывались также в рабочей консоли, не в эмуляторе - эффект одинаков. sh заменялся на bash - эффект одинаков. На компе только кеды.

Кто ещё чего посоветует?

Ответ на: комментарий от anonymous

пробовал по разному. Просто в конструктор, но это заведомо плохой вариант. Пробовал fromUTF8, fromLatin1. Короче, все методы from* класса QString

zamazan4ik ★★ ()

ЧЯДНТ?

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess p;

    p.start("echo кракозябры");

    p.waitForFinished(-1);

    qDebug() << QString::fromUtf8(p.readAllStandardOutput());

    return a.exec();
}

> ./untitled 
"кракозябры\n"
^C

anonymous ()
Ответ на: комментарий от zamazan4ik

Ты кстати уверен что правильный терминал используется и правильные переменные окружения? Попробуй

QProcess::start("echo $LANG");
. А эмулятор терминала можешь глянуть в Tools->Options->Environment->System

Еще: ты пробовал запускать из рабочего эмулятора терминала а не через Run в Qt Creator?

anonymous ()
Ответ на: комментарий от anonymous

да, этот экзампл работает. Но я вызываю такую строку :

p.start(«/bin/sh», QStringList() << "-c" << «kdesudo tlp ac»);

Если сразу ввести правильный пароль, то он просто скажет «TLP started in ac». Всё ок, но если хоть раз неправильно ввести пароль, то в консоль посыпится мусор какой-то в непонятной кодировке.

zamazan4ik ★★ ()
Ответ на: комментарий от anonymous

запускал и через рабочий терминал - эффект одинаковый. Значит дело не во встроенном в qt эмуляторе(у меня вроде xterm).

Подозреваю, что kdesudo возвращает в какой-то непонятной кодировке

zamazan4ik ★★ ()
Ответ на: комментарий от anonymous

да, мне кажется, что пора переименовать тред, чтобы не было даблпостинга.

zamazan4ik ★★ ()
9 января 2018 г.

Этот топик - 1 ссылка по запросу "kdesudo кодировка"

ISO-8859-1
В UTF-8 переводить так:

QTextCodec* defaultTextCodec = QTextCodec::codecForName("ISO-8859-1");
auto text = defaultTextCodec->fromUnicode(m_processPkg->readAll());

SR_team ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.