Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: DmitryKSL от Май 26, 2010, 07:58



Название: кодировка?
Отправлено: 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("йцукен") выводит правильно. Что-то не соображу где что еще надо сделать.


Название: Re: кодировка?
Отправлено: alexman от Май 26, 2010, 08:09
Попробуй так
Код:
arguments <<"/C"<< QTextCodec::codecForLocale()->toUnicode( "echo йцукен" );
?


Название: Re: кодировка?
Отправлено: DmitryKSL от Май 26, 2010, 09:56
Попробуй так
Код:
arguments <<"/C"<< QTextCodec::codecForLocale()->toUnicode( "echo йцукен" );
?
"©жгЄҐ­
"
"йцукен"

А тут так надо?
 qDebug()<< myProcess->readAllStandardOutput();
Тогда получаю
 "©?a??­
"
"йцукен"


Название: Re: кодировка?
Отправлено: sne от Май 26, 2010, 11:21
В винде для вывода в консоль используется не виндовая cp1251, а cp866, если я не ошибаюсь. Отсюда и кракозябры.


Название: Re: кодировка?
Отправлено: DmitryKSL от Май 27, 2010, 09:41
В винде для вывода в консоль используется не виндовая cp1251, а cp866, если я не ошибаюсь. Отсюда и кракозябры.
Тогда как кодировку поменять? В самой командной строке есть опция выводить в unicode например, но никак не пойму как этот ключ использовать.


Название: Re: кодировка?
Отправлено: DmitryKSL от Май 28, 2010, 07:11
Решение найдено
было
    qDebug()<< QString::fromLocal8Bit(myProcess->readAllStandardOutput());
стало
    QTextCodec::setCodecForTr(QTextCodec::codecForName("CP866"));
    qDebug()<< tr(myProcess->readAllStandardOutput());

Очень много времени потратил на поиски информации, два дня практически. Видел пример где писалось "IBM 866", и как дурак использовал это , а оно ни фига не то же самое что "CP866".