crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> создать запрос HTML-странички в URL-е которой имеются русские буквы
Гость_Саша_*
сообщение 28.1.2008, 20:30
Сообщение #1





Гости








    


Я вот тоже как раз с кодировками мучаюсь.
Но у меня вопрос с кодировкой для класса QHttp

Как мне корректно создать запрос HTML-странички в URL-е которой имеются русские буквы. Скажем как запросить страничку с адресом "http://aaa.ru?text=абвгде&submit=ok" ?
На самом деле "абвгде" как я понял должны быть преобразованы в %E0%E1%E2%E3%E4%E5, т.е. запрос должен быть таким:
http://aaa.ru?text=%E0%E1%E2%E3%E4%E5&submit=ok, но вот как получить эти самые %E0%E1%E2%E3%E4%E5 я не знаю. Нашёл только ф-ю QUrl::encode, но она для каждого русского символа делает двухбайтное значение, т.е. что-то типа %С3%AA
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 28.1.2008, 21:14
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Так:
QUrl url( "http://aaa.ru?text=абвгде&submit=ok");
QByteArray arr = url.toEncoded();
qDebug( "%s", qPrintable( QString( arr)));
Проверено в yandex'e... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 28.1.2008, 21:17
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 28.1.2008, 19:46) *
как в рантайме все это работает если локальная кодировка не UTF-8?
cм. setCodecForAnsi.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Саша_*
сообщение 28.1.2008, 21:19
Сообщение #4





Гости








    


Цитата(ViGOur @ 28.1.2008, 21:14) *
Так:
QUrl url( "http://aaa.ru?text=абвгде&submit=ok");
QByteArray arr = url.toEncoded();
qDebug( "%s", qPrintable( QString( arr)));
Проверено в yandex'e... :)

А если в Qt 3.3.4? Там такой ф-ии (toEncoded) нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 28.1.2008, 21:21
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

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




Репутация:   0  


Вот, нашёл точное наименование :)
http://www.crossplatform.ru/documentation/...odecForCStrings
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 28.1.2008, 21:22
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

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




Репутация:   0  


AFAICS, encode'ить в любом случае придётся...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Саша_*
сообщение 28.1.2008, 21:43
Сообщение #7





Гости








    


Цитата(archimed7592 @ 28.1.2008, 21:22) *
AFAICS, encode'ить в любом случае придётся...

Не понял...

Значит так, я, для получения правильно закодированной строки написал такую ф-ю:
CODE

QString GetUrlEncode( QString str )
{
const char *sss = str.ascii(); // просто для проверки
QString str2 = QTextCodec::codecForLocale()->fromUnicode(str);
sss = str2.ascii(); // просто для проверки
QUrl::encode( str2 );
sss = str2.ascii(); // просто для проверки
return str2;
}

И она возвращает 2-х байтовые значения русских символов. Т.е. символ 'к' преобразуется в %C3%AA
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.1.2008, 22:16
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Guest_Саша_* @ 28.1.2008, 23:30) *
QUrl::encode, но она для каждого русского символа делает двухбайтное значение, т.е. что-то типа %С3%AA

в UTF-16 два байта, в UTF-8 для русского тоже 2 байта, см. здесь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Саша_*
сообщение 29.1.2008, 11:34
Сообщение #9





Гости








    


Цитата(Litkevich Yuriy @ 28.1.2008, 22:16) *
Цитата(Guest_Саша_* @ 28.1.2008, 23:30) *
QUrl::encode, но она для каждого русского символа делает двухбайтное значение, т.е. что-то типа %С3%AA

в UTF-16 два байта, в UTF-8 для русского тоже 2 байта, см. здесь

Понятно...
Так и что же делать? Мне кажется легче вручную каждую букву перекодировать ф-ей sprintf( str, "%%%02X", c ), чем тратить ещё не знаю сколько времени, чтобы найти ф-ю делающую тоже самое...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 14.1.2025, 1:28