Russian Qt Forum
Ноябрь 23, 2024, 06:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: кодировка?  (Прочитано 6004 раз)
DmitryKSL
Гость
« : Май 26, 2010, 07:58 »

Нашел пример для запуска приложения из командной строки, на его основе получилось так:
Код:
void Dialog::GetUserInfo()
{
  QString program;
  QStringList arguments;

  program="cmd.exe";
  arguments <<"/C"<<"echo йцукен";
  //arguments <<"/C"<<"c:\\windows\\system32\\cscript.exe c:\\2.vbs";
  myProcess=new QProcess();
  myProcess->setEnvironment(QProcess::systemEnvironment());
   connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessages()) );
   connect(myProcess, SIGNAL(readyReadStandardError()), this, SLOT(slotMessages()) );
  myProcess->start(program,arguments);
  myProcess->waitForFinished ();
  myProcess->deleteLater();
}
void Dialog::slotMessages()
{
    qDebug()<< QString::fromLocal8Bit(myProcess->readAllStandardOutput());
    qDebug()<< QString::fromLocal8Bit("йцукен");
}
Собственно нужно из скрипта получать инфу о пользователях в домене, вместо русских букв кракозябры. Пока закомментировал и заменил на - arguments <<"/C"<<"echo йцукен";

Вижу:
"eooeai
"
"йцукен"
Т.е. qDebug()<< QString::fromLocal8Bit("йцукен") выводит правильно. Что-то не соображу где что еще надо сделать.
Записан
alexman
Гость
« Ответ #1 : Май 26, 2010, 08:09 »

Попробуй так
Код:
arguments <<"/C"<< QTextCodec::codecForLocale()->toUnicode( "echo йцукен" );
?
Записан
DmitryKSL
Гость
« Ответ #2 : Май 26, 2010, 09:56 »

Попробуй так
Код:
arguments <<"/C"<< QTextCodec::codecForLocale()->toUnicode( "echo йцукен" );
?
"©жгЄҐ­
"
"йцукен"

А тут так надо?
 qDebug()<< myProcess->readAllStandardOutput();
Тогда получаю
 "©?a??­
"
"йцукен"
Записан
sne
Гость
« Ответ #3 : Май 26, 2010, 11:21 »

В винде для вывода в консоль используется не виндовая cp1251, а cp866, если я не ошибаюсь. Отсюда и кракозябры.
Записан
DmitryKSL
Гость
« Ответ #4 : Май 27, 2010, 09:41 »

В винде для вывода в консоль используется не виндовая cp1251, а cp866, если я не ошибаюсь. Отсюда и кракозябры.
Тогда как кодировку поменять? В самой командной строке есть опция выводить в unicode например, но никак не пойму как этот ключ использовать.
Записан
DmitryKSL
Гость
« Ответ #5 : Май 28, 2010, 07:11 »

Решение найдено
было
    qDebug()<< QString::fromLocal8Bit(myProcess->readAllStandardOutput());
стало
    QTextCodec::setCodecForTr(QTextCodec::codecForName("CP866"));
    qDebug()<< tr(myProcess->readAllStandardOutput());

Очень много времени потратил на поиски информации, два дня практически. Видел пример где писалось "IBM 866", и как дурак использовал это , а оно ни фига не то же самое что "CP866".
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 21.