Страница 1 из 1
Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 12:57
Yamah
Имеем Qt 5.2 из репозитория.
В QtCreator пишем код, использующий QProcess (работа с командной строкой).
На входе сообщения из консоли ("ls ~/", к примеру), на выходе вместо русский букв крякозябры.
То есть, 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=
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 13:20
Pulfer
Yamah писал(а):Где и чего подправить нужно?
Если мне не изменяет память, то в Qt по умолчанию стоит кодек Latin-1, так что надо в main() просто указать UTF-8:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Возможно, в Убунту пропатчили Qt, чтобы по умолчанию UTF-8 использовался.
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 13:28
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
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 13:30
admsasha
Pulfer писал(а):Yamah писал(а):Где и чего подправить нужно?
Если мне не изменяет память, то в Qt по умолчанию стоит кодек Latin-1, так что надо в main() просто указать UTF-8:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Возможно, в Убунту пропатчили Qt, чтобы по умолчанию UTF-8 использовался.
Разве в Qt5 по умолчанию не сделали как раз UTF-8 ?
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 13:39
Pulfer
admsasha писал(а):Разве в Qt5 по умолчанию не сделали как раз UTF-8 ?
А, ну да, точно, там и так UTF-8 по умолчанию. Сейчас проверил, у меня тоже всё нормально.
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 13:49
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]);
}
Re: Qt 5.2 QProcess не воспринимает кирилицу
Добавлено: 28 апр 2014, 14:02
admsasha
Нее, в Qt4 точно не лишнее. Там просто от положение звезд зависит результат. Тем более когда пишешь код на разных OS, это очень даже не лишне) Так что в Qt4, я думаю, всегда нужно устанавливать UTF-8 явным образом. Собственно, что я всегда и делаю...
А вообще, тут как раз можно поставить
Код: Выделить всё
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
Тогда достаточно будет
Как бы меньше писать
Либо всё сразу и вообще забыть про кодировку
Код: Выделить всё
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));