Qt 5.2 QProcess не воспринимает кирилицу

Ответить
Аватара пользователя
Yamah
Сообщения: 1386
Зарегистрирован: 04 май 2012, 06:30
Operating system: Десктоп (дом): Rosa Fresh R8.1, Rosa Fresh R10
Десктоп (работа): Rosa Fresh R8.1/Rosa Fresh R10
Сервер (работа): Rosa Enterprise Linux Sercver 6.7
Нетбук: Rosa Fresh R10
Контактная информация:

Qt 5.2 QProcess не воспринимает кирилицу

Сообщение Yamah »

Имеем Qt 5.2 из репозитория.
В QtCreator пишем код, использующий QProcess (работа с командной строкой).
На входе сообщения из консоли ("ls ~/", к примеру), на выходе вместо русский букв крякозябры.

Код: Выделить всё

"¾Ð½Ð°Ð»Ñ\214ное пÑ\"
То есть, Qt не понимает UTF-8.
Проверенно на двух машинах.
Тот же код на Ubuntu нормально выдает.

Где и чего подправить нужно?

Rosa Fres R2 x86_64

Код: Выделить всё

locale
LANG=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=ru_RU.UTF-8
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=
Аватара пользователя
Pulfer
Сообщения: 3310
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение Pulfer »

Yamah писал(а):Где и чего подправить нужно?
Если мне не изменяет память, то в Qt по умолчанию стоит кодек Latin-1, так что надо в main() просто указать UTF-8:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

Возможно, в Убунту пропатчили Qt, чтобы по умолчанию UTF-8 использовался.
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Аватара пользователя
admsasha
Сообщения: 256
Зарегистрирован: 25 ноя 2011, 17:54
Operating system: ROSA
Контактная информация:

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение admsasha »

Сделал минимальный пример

Код: Выделить всё

    QProcess proc;
    proc.start("ls /home/sasha");
    proc.waitForFinished();
    qDebug() << proc.readAll();
Все папки которые должны быть русские, они русские.
...
Видео
Документы
Загрузки
Изображения
Музыка
Общедоступные
Рабочий стол
...
$qmake-qt5 -v
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib
Аватара пользователя
admsasha
Сообщения: 256
Зарегистрирован: 25 ноя 2011, 17:54
Operating system: ROSA
Контактная информация:

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение admsasha »

Pulfer писал(а):
Yamah писал(а):Где и чего подправить нужно?
Если мне не изменяет память, то в Qt по умолчанию стоит кодек Latin-1, так что надо в main() просто указать UTF-8:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

Возможно, в Убунту пропатчили Qt, чтобы по умолчанию UTF-8 использовался.
Разве в Qt5 по умолчанию не сделали как раз UTF-8 ?
Аватара пользователя
Pulfer
Сообщения: 3310
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение Pulfer »

admsasha писал(а):Разве в Qt5 по умолчанию не сделали как раз UTF-8 ?
А, ну да, точно, там и так UTF-8 по умолчанию. Сейчас проверил, у меня тоже всё нормально.
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Аватара пользователя
Pulfer
Сообщения: 3310
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение Pulfer »

Для Qt4 тоже оказалось лишним устанавливать кодек UTF-8.

Но пришлось применить QString::fromLocal8Bit() к argv, чтобы получить текст в правильной кодировке:

Код: Выделить всё

    QCoreApplication a(argc, argv);
    QTextStream out(stdout);
    QStringList opts;
    for (int j=0; j < argc; j++)
    {
        opts << QString::fromLocal8Bit(argv[j]);
    }
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Аватара пользователя
admsasha
Сообщения: 256
Зарегистрирован: 25 ноя 2011, 17:54
Operating system: ROSA
Контактная информация:

Re: Qt 5.2 QProcess не воспринимает кирилицу

Сообщение admsasha »

Нее, в Qt4 точно не лишнее. Там просто от положение звезд зависит результат. Тем более когда пишешь код на разных OS, это очень даже не лишне) Так что в Qt4, я думаю, всегда нужно устанавливать UTF-8 явным образом. Собственно, что я всегда и делаю...

А вообще, тут как раз можно поставить

Код: Выделить всё

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); 
Тогда достаточно будет

Код: Выделить всё

opts << QString(argv[j]);
Как бы меньше писать :)

Либо всё сразу и вообще забыть про кодировку

Код: Выделить всё

QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
Ответить

Вернуться в «Обсуждение ROSA Fresh R2, R3 (платформа 2012.1)»