Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: lega4 от Май 13, 2011, 22:45



Название: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 13, 2011, 22:45
У меня есть некая QString с русскими словами. Мне ее надо отправить как параметр post-запроса в интернет. Но post принимает как параметр только QByteArray, поэтому приходится создавать его. Но после копирования строки в него, в нем получаются странные кракозябры((( И fromLocal8Bit пробовал, и другие from... Все равно одно и то же.
P.S. Я юзал поиск, понял только, что кириллицу в коде нормальные люди вообще не юзают и не рекомендуют. Но мне, как я уже написал, надо отправить post-запрос с кириллическими параметрами, без кириллицы никуда...


Название: Re: QString c русскими символами в QByteArray
Отправлено: blood_shadow от Май 13, 2011, 23:25
У меня есть некая QString с русскими словами. Мне ее надо отправить как параметр post-запроса в интернет. Но post принимает как параметр только QByteArray, поэтому приходится создавать его. Но после копирования строки в него, в нем получаются странные кракозябры((( И fromLocal8Bit пробовал, и другие from... Все равно одно и то же.
P.S. Я юзал поиск, понял только, что кириллицу в коде нормальные люди вообще не юзают и не рекомендуют. Но мне, как я уже написал, надо отправить post-запрос с кириллическими параметрами, без кириллицы никуда...
кракозябры получаются из-за того что при конвертации с QString в QByteArray используется toLatin1() если кодек
не установлен, тебе нужно установить правильный кодек с помощью setCodecForCStrings()


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 14, 2011, 07:55
А какой кодек надо поставить?
Сейчас данный кусок кода выглядит примерно так. В QLineEdit famedt пользователь вводит нечто на кириллице (В данном случае  -фамилию).
Код
C++ (Qt)
QTextCodec *RusCodec = QTextCodec::codecForName("CP1251");
QTextCodec::setCodecForCStrings(RusCodec);
   QTextCodec::setCodecForTr(RusCodec);
inputs->addRow(QObject::tr("Фамилия:"),famedt);
...
QString str=famedt->text();
QByteArray arr;
arr="";
arr+=str;
 


Название: Re: QString c русскими символами в QByteArray
Отправлено: blood_shadow от Май 14, 2011, 10:25
ту кодировку в какой будут символы,
можно так:
Код
C++ (Qt)
QTextCodec *RusCodec = QTextCodec::codecForLocale();
 
документацию по кодеком ты похоже вообще не читал, нет там такого имени кодека "CP1251"


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 14, 2011, 16:14
Цитировать
QTextCodec *RusCodec = QTextCodec::codecForLocale();
Не сработало, те же кракозябры...

>ту кодировку в какой будут символы,
Эмм.. Не я же ее задаю, откуда я знаю. Строки будут вводится в LineEdit, собирается иь запускается это все под русской виндой. По дефолту наверно win-1251, но точно я не знаю.

Цитировать
документацию по кодеком ты похоже вообще не читал, нет там такого имени кодека "CP1251"
Это с какой-то соседней темы был копипаст. Там про это ничего не говорили)
Сейчас заиспользовал QTextCodec::availableCodecs()  - CP1251 там есть, так что все ок)


Название: Re: QString c русскими символами в QByteArray
Отправлено: Авварон от Май 14, 2011, 17:19
QString::toUtf8
я слышал интернеты любят 8й утф


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 14, 2011, 17:40
Авварон, интернеты-то любят, но пока речь о QByteArray :) А ему и .toUtf8() тоже не нравится, кракозябры...


Название: Re: QString c русскими символами в QByteArray
Отправлено: Fat-Zer от Май 14, 2011, 19:17
Авварон, интернеты-то любят, но пока речь о QByteArray :) А ему и .toUtf8() тоже не нравится, кракозябры...
а куда вы потом этот QByteArray отправляете, чтобы посмотреть?


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 14, 2011, 19:44
Что значит "чтобы посмотреть"? Смотрю в среде разработки)
Отправляю в интернет, но тому сайту, куда отправляю, нужна кириллица, если туда приходят кракозябры, то он ругается...


Название: Re: QString c русскими символами в QByteArray
Отправлено: Fat-Zer от Май 14, 2011, 20:11
Что значит "чтобы посмотреть"? Смотрю в среде разработки)
Отправляю в интернет, но тому сайту, куда отправляю, нужна кириллица, если туда приходят кракозябры, то он ругается...
крякозябры вместо русского под дебагером - норма... проверяйте что текст в конкретной кодировке закодирован правильно по числовым кодам... а так - перекодируйте в ту кодировку, которую ожидает сервер.


Название: Re: QString c русскими символами в QByteArray
Отправлено: ритт от Май 14, 2011, 20:54
вот все заболели прям этим QTextCodec::setCodecForCStrings()...

Код:
QString str=famedt->text();
QByteArray arr;
arr="";
arr+=str;
а? что? и оно не работает?

lega4, какая кодировка нужна сайту?

зы. читать QTextCodec::fromUnicode(). звать на правильном кодеке.


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 14, 2011, 21:29
Сайту вроде UTF8 подойдет. Вот данные со сниффера, когда из браузера запрос делался
Цитировать
Accept-Charset:iso-8859-1, utf-8, utf-16
Цитировать
крякозябры вместо русского под дебагером - норма...
Но ведь в QString я вижу нормальные русские буквы...
Цитировать
QString str=famedt->text();
QByteArray arr;
arr="";
arr+=str;
а? что? и оно не работает?
Ага, и оно не работает...


Название: Re: QString c русскими символами в QByteArray
Отправлено: asvil от Май 14, 2011, 22:50
http://doc.qt.nokia.com/4.7/qurl.html#toEncoded ?

QUrl("http://www.google.ru/?q=фыва").toEncoded()


Название: Re: QString c русскими символами в QByteArray
Отправлено: ритт от Май 14, 2011, 23:17
Сайту вроде UTF8 подойдет. Вот данные со сниффера, когда из браузера запрос делался
Цитировать
Accept-Charset:iso-8859-1, utf-8, utf-16
Цитировать
крякозябры вместо русского под дебагером - норма...
Но ведь в QString я вижу нормальные русские буквы...
Цитировать
QString str=famedt->text();
QByteArray arr;
arr="";
arr+=str;
а? что? и оно не работает?
Ага, и оно не работает...

тогда снифф запроса целиком, плз
и рабочего + дрянного ответа тоже - а то мы так долго угадывать будем...


Название: Re: QString c русскими символами в QByteArray
Отправлено: Fat-Zer от Май 15, 2011, 03:25
Но ведь в QString я вижу нормальные русские буквы...
просто "везёт", в этом виноват помощник отладчика.... а вообще не знаю, что внутри QString'а творится...


Название: Re: QString c русскими символами в QByteArray
Отправлено: ритт от Май 15, 2011, 07:37
Но ведь в QString я вижу нормальные русские буквы...
просто "везёт", в этом виноват помощник отладчика.... а вообще не знаю, что внутри QString'а творится...
зато я знаю...


Название: Re: QString c русскими символами в QByteArray
Отправлено: lega4 от Май 15, 2011, 08:45
Цитировать
QUrl("http://www.google.ru/?q=фыва").toEncoded()
ЕЕЕ! Оно работает) Спасибо)