Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: syrok от Май 22, 2009, 02:38



Название: QTextCodec и русский (QT 4.5)
Отправлено: 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. Как исправить ситуацию?


Название: Re: QTextCodec и русский (QT 4.5)
Отправлено: kirill от Май 22, 2009, 05:26
Код:
QString string = "привет мир";
QByteArray encodedString = string.toAscii();


Название: Re: QTextCodec и русский (QT 4.5)
Отправлено: syrok от Май 22, 2009, 12:45
Код:
QString string = "привет мир";
QByteArray encodedString = string.toAscii();
Конечно же я так тоже пробовал. Но такая штука возвращает бред, а именно "i?eaao ie?". Если смотреть в массив, то там отрицательные значения! Ерунда...
Попробовал я такое:
Код:
QString string = "привет мир";
QByteArray encodedString = string.toLocal8Bit();
Резултат ошеломил. Строка получилась как и в предыдущей попытке, вот только коды английский символов.
Я в отчаянии...


Название: Re: QTextCodec и русский (QT 4.5)
Отправлено: developer от Май 22, 2009, 23:23
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));

i togda ispolzyesh svoj cod.

Poprobyj, po krajnej mere menja eta construccija spasala.


Название: Re: QTextCodec и русский (QT 4.5)
Отправлено: syrok от Май 23, 2009, 02:00
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
Ой, спасибо вам большое!!! Я делал
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
но не думал, что нужно еще вызывать setCodecForCStrings... Троли в своем репертуаре.

PS: Может кому-то будет полезно, QUrl::toPercentEncoding так и не захотел работать, но как обнаружилось такой же метод есть у QByteArray. Вот он РАБОТАЕТ!


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

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