Russian Qt Forum

Qt => Вопросы новичков => Тема начата: GamBitiK от Апрель 19, 2014, 09:13



Название: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 09:13
получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке

QString fan =(QString)Reply->readAll();


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: Old от Апрель 19, 2014, 09:17
получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке
class QTextCodec


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 09:52
получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке
class QTextCodec
А если я работаю в консоле?


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: Bepec от Апрель 19, 2014, 09:53
class QTextCodec


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: Old от Апрель 19, 2014, 09:53
А если я работаю в консоле?
А какая разница? Это класс для конвертации строк из/в разные кодировки.


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 10:22
Спасибо большое ребят


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 10:26
Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 10:34
Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать

QString string = ...; // некоторый текст в Unicode

 QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);
А можно в Qstring оставить?



Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: OKTA от Апрель 19, 2014, 13:14
QString::QString ( const QByteArray & ba )


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 13:20
QString::QString ( const QByteArray & ba )
а можно поподробнее)


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 13:24
а то когда беру данные в QString мне пишет

 "<?xml version="1.0" encoding="windows-1251"?><rss version="2.0" xmlns="http://backend.userland.com/rss2" xmlns:yandex="http://news.yandex.ru">\n<channel>\n<image>\n<url>http://www.adygtv.ru/logo.jpg</url>\n<title>���� "������"</title>\n<link>http://www.adygtv.ru/</link>\n</image>\n<title>������� </title>\n<link>http://www.adygtv.ru</link>\n<description></description>\n<lastBuildDate>Sat, 19 Apr 2014 14:06:06 +0400</lastBuildDate>\n<ttl>60</ttl>\n<item>\n\t<title>� ������ �������� ��������� ������ ���������..."


а когда переконвертировать в QByteArray


"<?xml version="1.0" encoding="windows-1251"?><rss version="2.0" xmlns="http://backend.userland.com/rss2" xmlns:yandex="http://news.yandex.ru">\n<channel>\n<image>\n<url>http://www.adygtv.ru/logo.jpg</url>\n<title>���� "������"</title>\n<link>http://www.adygtv.ru/</link>\n</image>\n<title>������� </title>\n<link>http://www.adygtv.ru</link>\n<description></description>\n<lastBuildDate>Sat, 19 Apr 2014 14:06:06 +0400</lastBuildDate>\n<ttl>60</ttl>\n<item>\n\t<title>� ��..."


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: OKTA от Апрель 19, 2014, 13:31
А вообще зачем в QString вставлять и при чем здесь "ISO 8859-5", если  у тебя 1251?


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: GamBitiK от Апрель 19, 2014, 15:14
А вообще зачем в QString вставлять и при чем здесь "ISO 8859-5", если  у тебя 1251?
ISO 8859-5 это в примере было,просто скопировал!
а в QString что бы распарсиь,разложить по полочкам


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: OKTA от Апрель 21, 2014, 09:07
Не знаю, как в 5, но в 4
Код:
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);
Этим ты переводил данные из юникода в нужную тебе кодировку. А чтобы работать со стройкой через тот же QString гораздо удобнее переводить ее в юникод, т.е. использовать toUnicode. А потом уже, если потребуется, переводить обратно через fromUnicode.
Алгоритм действий простой
1. Читаешь строку из внешнего источника в QByteArray
2. Зная кодировку, переводишь массив байт в QString.
3. Делаешь нужные преобразования
4. Если надо отдать данные во внешний источник, переводишь QString в нужную кодировку и отправляешь.


Название: Re: Кодировка из Windows1251 в UTF-8
Отправлено: sergek от Апрель 21, 2014, 11:49
Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать
На мой взгляд, самое изящное объяснение, как работает кодек: http://www.sql.ru/forum/867419/qt-kak-polzovatsya-qtextcodec-dlya-bulochnikov-i-chaynikov (http://www.sql.ru/forum/867419/qt-kak-polzovatsya-qtextcodec-dlya-bulochnikov-i-chaynikov)