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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextCodec и русский (QT 4.5)  (Прочитано 8722 раз)
syrok
Гость
« : Май 22, 2009, 02:38 »

Значит понадобилось мне высылать GET запрос на сервер... При этом строку нужно превратить в процентную нотацию.
Для этого была найдена стандартная функция QUrl::toPercentEncoding(const QString & input). Все казалось прекрасным, как вдруг обнаружилось,что запросы, имеющие русские символы не работают. Проснифив трафик ситуация прояснилась. Оказывается, эта функция интерпретирует каждый символ, как два байта! А мне нужно, что бы она давала 1 байт. Помучавшись с функцией и не добившись результата было решено написать свою. И опять проблеммы. Нужно получать аски код каждого символа. Покопавшись в ассистенте было найдено вот это:
Код:
 
QString string = "привет мир";
QTextCodec *codec = QTextCodec::codecForName("windows-1251");
QByteArray encodedString = codec->fromUnicode(string);
Но эта штука возвращает масив, где каждый байт равен 63. Как исправить ситуацию?
Записан
kirill
Гость
« Ответ #1 : Май 22, 2009, 05:26 »

Код:
QString string = "привет мир";
QByteArray encodedString = string.toAscii();
Записан
syrok
Гость
« Ответ #2 : Май 22, 2009, 12:45 »

Код:
QString string = "привет мир";
QByteArray encodedString = string.toAscii();
Конечно же я так тоже пробовал. Но такая штука возвращает бред, а именно "i?eaao ie?". Если смотреть в массив, то там отрицательные значения! Ерунда...
Попробовал я такое:
Код:
QString string = "привет мир";
QByteArray encodedString = string.toLocal8Bit();
Резултат ошеломил. Строка получилась как и в предыдущей попытке, вот только коды английский символов.
Я в отчаянии...
Записан
developer
Гость
« Ответ #3 : Май 22, 2009, 23:23 »

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));

i togda ispolzyesh svoj cod.

Poprobyj, po krajnej mere menja eta construccija spasala.
Записан
syrok
Гость
« Ответ #4 : Май 23, 2009, 02:00 »

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Ой, спасибо вам большое!!! Я делал
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
но не думал, что нужно еще вызывать setCodecForCStrings... Троли в своем репертуаре.

PS: Может кому-то будет полезно, QUrl::toPercentEncoding так и не захотел работать, но как обнаружилось такой же метод есть у QByteArray. Вот он РАБОТАЕТ!
Записан
ритт
Гость
« Ответ #5 : Май 24, 2009, 02:14 »

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Ой, спасибо вам большое!!! Я делал
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
но не думал, что нужно еще вызывать setCodecForCStrings... Троли в своем репертуаре.
методам setCodecFor* уже много лет.
а в своём репертуаре пользователи, ленящиеся читать документацию *хотя бы по тем функциям, которые используют в собственном коде*. фраза "но не думал" довольно точно характеризует таких пользователей.

PS: Может кому-то будет полезно, QUrl::toPercentEncoding так и не захотел работать, но как обнаружилось такой же метод есть у QByteArray. Вот он РАБОТАЕТ!
если это так, следует отрапортовать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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