crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Перевод русских символов в формат http-строки
NordWest
  опции профиля:
сообщение 15.1.2010, 10:17
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Формирую в программе Get запрос с помощью QHttp::get(requestStr). Не знаю вот только как быть с русскими символами в строке запроса. Как её переводить в формат с процентами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.1.2010, 10:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(NordWest @ 15.1.2010, 10:17) *
Как её переводить в формат с процентами?

Посмотри на:
QByteArray QUrl::toPercentEncoding ( const QString & input, const QByteArray & exclude = QByteArray(), const QByteArray & include = QByteArray() ) [static]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 15.1.2010, 12:29
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Видимо что-то то. Только вот как-то не получается вывести из QLineEdit русскую букву нормально. Вместо "Д" выводится почему-то "A" и в проценты не те конвертируется. Должно быть "%C4" а получается "%D0%94. Как-то непонятно. В принципе в консоле оно не обязано правильно отображаться, но...

    QString requestStr = "/db/plates/fits.php?instr="+getHDlg->ui_instr->currentText()+"&num="+getHDlg->ui_plateNum->text().simplified();
    QUrl urlStr;
    QByteArray ba = urlStr.toPercentEncoding(requestStr, "-/._~=?&", "Д");
    requestStr = QString(ba.constData());
    http->get(requestStr);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.1.2010, 12:35
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(NordWest @ 15.1.2010, 12:29) *
Видимо что-то то. Только вот как-то не получается вывести из QLineEdit русскую букву нормально. Вместо "Д" выводится почему-то "A" и в проценты не те конвертируется. Должно быть "%C4" а получается "%D0%94. Как-то непонятно. В принципе в консоле оно не обязано правильно отображаться, но...

А ты попробуй строку сначала в кодировку CP1251 перевести.
Смотри QTextCodec.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 15.1.2010, 12:50
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Вот так?

    QTextCodec *codec1 = QTextCodec::codecForName("CP1251");
    QByteArray bpn = QByteArray((char*)getHDlg->ui_plateNum->text().simplified().data());
    QString pnStr = codec1->toUnicode(bpn);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.1.2010, 12:55
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(NordWest @ 15.1.2010, 12:50) *
Вот так?

Скорее так:
QTextCodec *codec1 = QTextCodec::codecForName( "Windows-1250" );
Q_ASSERT( codec1 );
QByteArray bpn = codec1->fromUnicode( getHDlg->ui_plateNum->text() );

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 15.1.2010, 13:15
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Теперь вместо "Д" знак вопроса выводится.

    QTextCodec *codec1 = QTextCodec::codecForName("Windows-1250");
    Q_ASSERT( codec1 );
    QByteArray bpn = codec1->fromUnicode(getHDlg->ui_plateNum->text().simplified());
    QString pnStr = bpn.constData();
    qDebug() << QString("pnStr: %1\n").arg(pnStr);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.1.2010, 13:28
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(NordWest @ 15.1.2010, 13:15) *
Теперь вместо "Д" знак вопроса выводится.

Это я промахнулся ;)
    QTextCodec *codec1 = QTextCodec::codecForName("Windows-1251");


Исправление!
QByteArray QUrl::toPercentEncoding ( const QString & input, const QByteArray & exclude = QByteArray(), const QByteArray & include = QByteArray() ) [static]
вначале конвертирует в UTF-8, а вот
QByteArray QByteArray::toPercentEncoding ( const QByteArray & exclude = QByteArray(), const QByteArray & include = QByteArray(), char percent = '%' ) const
этого не делает. Попробуй использовать ее.


Сообщение отредактировал BRE - 15.1.2010, 13:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 15.1.2010, 21:35
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


А как бы в QByteArray из QString перегнать?
Так?
QByteArray ba = QByteArray(requestStr.toUtf8()).toPercentEncoding("-/._~=?&");
requestStr = QString(ba.constData());


Или toAscII()? Или (char*) data()? Результат разный, но все равно не тот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.1.2010, 21:43
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Так после QTextCodec::fromUnicode получаем QByteArray.
QTextCodec *codec = QTextCodec::codecForName( "Windows-1251" );
Q_ASSERT( codec );
QByteArray bpn = codec->fromUnicode( getHDlg->ui_plateNum->text() );
qDebug() << bpn.toPercentEncoding();

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.1.2025, 19:21