Russian Qt Forum
Сентябрь 21, 2024, 18:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QString c русскими символами в QByteArray  (Прочитано 15539 раз)
lega4
Гость
« : Май 13, 2011, 22:45 »

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

У меня есть некая QString с русскими словами. Мне ее надо отправить как параметр post-запроса в интернет. Но post принимает как параметр только QByteArray, поэтому приходится создавать его. Но после копирования строки в него, в нем получаются странные кракозябры((( И fromLocal8Bit пробовал, и другие from... Все равно одно и то же.
P.S. Я юзал поиск, понял только, что кириллицу в коде нормальные люди вообще не юзают и не рекомендуют. Но мне, как я уже написал, надо отправить post-запрос с кириллическими параметрами, без кириллицы никуда...
кракозябры получаются из-за того что при конвертации с QString в QByteArray используется toLatin1() если кодек
не установлен, тебе нужно установить правильный кодек с помощью setCodecForCStrings()
Записан
lega4
Гость
« Ответ #2 : Май 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;
 
Записан
blood_shadow
Гость
« Ответ #3 : Май 14, 2011, 10:25 »

ту кодировку в какой будут символы,
можно так:
Код
C++ (Qt)
QTextCodec *RusCodec = QTextCodec::codecForLocale();
 
документацию по кодеком ты похоже вообще не читал, нет там такого имени кодека "CP1251"
Записан
lega4
Гость
« Ответ #4 : Май 14, 2011, 16:14 »

Цитировать
QTextCodec *RusCodec = QTextCodec::codecForLocale();
Не сработало, те же кракозябры...

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

Цитировать
документацию по кодеком ты похоже вообще не читал, нет там такого имени кодека "CP1251"
Это с какой-то соседней темы был копипаст. Там про это ничего не говорили)
Сейчас заиспользовал QTextCodec::availableCodecs()  - CP1251 там есть, так что все ок)
« Последнее редактирование: Май 14, 2011, 17:41 от lega4 » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Май 14, 2011, 17:19 »

QString::toUtf8
я слышал интернеты любят 8й утф
Записан
lega4
Гость
« Ответ #6 : Май 14, 2011, 17:40 »

Авварон, интернеты-то любят, но пока речь о QByteArray Улыбающийся А ему и .toUtf8() тоже не нравится, кракозябры...
Записан
Fat-Zer
Гость
« Ответ #7 : Май 14, 2011, 19:17 »

Авварон, интернеты-то любят, но пока речь о QByteArray Улыбающийся А ему и .toUtf8() тоже не нравится, кракозябры...
а куда вы потом этот QByteArray отправляете, чтобы посмотреть?
Записан
lega4
Гость
« Ответ #8 : Май 14, 2011, 19:44 »

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

Что значит "чтобы посмотреть"? Смотрю в среде разработки)
Отправляю в интернет, но тому сайту, куда отправляю, нужна кириллица, если туда приходят кракозябры, то он ругается...
крякозябры вместо русского под дебагером - норма... проверяйте что текст в конкретной кодировке закодирован правильно по числовым кодам... а так - перекодируйте в ту кодировку, которую ожидает сервер.
Записан
ритт
Гость
« Ответ #10 : Май 14, 2011, 20:54 »

вот все заболели прям этим QTextCodec::setCodecForCStrings()...

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

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

зы. читать QTextCodec::fromUnicode(). звать на правильном кодеке.
Записан
lega4
Гость
« Ответ #11 : Май 14, 2011, 21:29 »

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

http://doc.qt.nokia.com/4.7/qurl.html#toEncoded ?

QUrl("http://www.google.ru/?q=фыва").toEncoded()
Записан
ритт
Гость
« Ответ #13 : Май 14, 2011, 23:17 »

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

тогда снифф запроса целиком, плз
и рабочего + дрянного ответа тоже - а то мы так долго угадывать будем...
Записан
Fat-Zer
Гость
« Ответ #14 : Май 15, 2011, 03:25 »

Но ведь в QString я вижу нормальные русские буквы...
просто "везёт", в этом виноват помощник отладчика.... а вообще не знаю, что внутри QString'а творится...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.171 секунд. Запросов: 23.