Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: PinkPanther от Август 31, 2009, 11:39



Название: [РЕШЕНО] Конвертация русской строки для передачи Http POST
Отправлено: PinkPanther от Август 31, 2009, 11:39
Добрый день, уважаемые коллеги!

Столкнулся с задачей отправить текст в ЖЖ (livejournal.com) посредством их flat-интерфейса (http://www.livejournal.com/doc/server/ljp.csp.guide.intro.html). Он не хочет принимать ни кириллицу, ни спец. символы, требуя вместо них код ascii в формате %hh (насколько понял, h - это hex-символ).

Нет ли в Qt ф-ции, которая бы приводила все символы входного текста в вид %hh, т.е. в вид, в котором они появляются при отправке данных форм методом get в адресной строке?

Спасибо!


Название: Re: Конвертация русской строки для передачи Http POST
Отправлено: Karl-Philipp от Август 31, 2009, 11:51
не уверен, но возможно поможет
http://doc.trolltech.com/4.5/qurl.html#toPercentEncoding
Цитировать
QByteArray QUrl::toPercentEncoding ( const QString & input, const QByteArray & exclude = QByteArray(), const QByteArray & include = QByteArray() )   [static]

Returns an encoded copy of input. input is first converted to UTF-8, and all ASCII-characters that are not in the unreserved group are percent encoded. To prevent characters from being percent encoded pass them to exclude. To force characters to be percent encoded pass them to include.

Unreserved is defined as: ALPHA / DIGIT / "-" / "." / "_" / "~"

 QByteArray ba = QUrl::toPercentEncoding("{a fishy string?}", "{}", "s");
 qDebug(ba.constData());
 // prints "{a fi%73hy %73tring%3F}"


Название: Re: Конвертация русской строки для передачи Http POST
Отправлено: PinkPanther от Август 31, 2009, 13:05
не уверен, но возможно поможет
http://doc.trolltech.com/4.5/qurl.html#toPercentEncoding

Спасибо! Частично проблема решена (во всяком случае один пост с русскими буквами робот как-то создал).
Сделал такой блок в начале:

QTextCodec *utfcodec = QTextCodec::codecForName("cp1251");
QTextCodec::setCodecForTr(utfcodec);   
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));

А потом, с помощью ф-ции QByteArray::toLocal8Bit переделал всё в 8 бит и перевёл в % с помощью QUrl::toPercentEncoding(QString).

Одна проблема - результирующий пост в блоге веб-средствами ЖЖ не хочет ни редактироваться, не удаляться, жалуясь на проблемы кодировок. Приходится включать перекодирование для того, чтобы решить эту проблему.