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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кодировка из Windows1251 в UTF-8  (Прочитано 8273 раз)
GamBitiK
Гость
« : Апрель 19, 2014, 09:13 »

получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке

QString fan =(QString)Reply->readAll();
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Апрель 19, 2014, 09:17 »

получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке
class QTextCodec
Записан
GamBitiK
Гость
« Ответ #2 : Апрель 19, 2014, 09:52 »

получаю строчку из Интернета если в кодировке UTF-8 то проблем нету,а если в WIN1251 выдает крякозяблики,подскажите как поменять кодировку получаемой страничке
class QTextCodec
А если я работаю в консоле?
Записан
Bepec
Гость
« Ответ #3 : Апрель 19, 2014, 09:53 »

class QTextCodec
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #4 : Апрель 19, 2014, 09:53 »

А если я работаю в консоле?
А какая разница? Это класс для конвертации строк из/в разные кодировки.
Записан
GamBitiK
Гость
« Ответ #5 : Апрель 19, 2014, 10:22 »

Спасибо большое ребят
Записан
GamBitiK
Гость
« Ответ #6 : Апрель 19, 2014, 10:26 »

Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать
Записан
GamBitiK
Гость
« Ответ #7 : Апрель 19, 2014, 10:34 »

Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать

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

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

Записан
OKTA
Гость
« Ответ #8 : Апрель 19, 2014, 13:14 »

QString::QString ( const QByteArray & ba )
Записан
GamBitiK
Гость
« Ответ #9 : Апрель 19, 2014, 13:20 »

QString::QString ( const QByteArray & ba )
а можно поподробнее)
Записан
GamBitiK
Гость
« Ответ #10 : Апрель 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>� ��..."
Записан
OKTA
Гость
« Ответ #11 : Апрель 19, 2014, 13:31 »

А вообще зачем в QString вставлять и при чем здесь "ISO 8859-5", если  у тебя 1251?
Записан
GamBitiK
Гость
« Ответ #12 : Апрель 19, 2014, 15:14 »

А вообще зачем в QString вставлять и при чем здесь "ISO 8859-5", если  у тебя 1251?
ISO 8859-5 это в примере было,просто скопировал!
а в QString что бы распарсиь,разложить по полочкам
Записан
OKTA
Гость
« Ответ #13 : Апрель 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 в нужную кодировку и отправляешь.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #14 : Апрель 21, 2014, 11:49 »

Еще вопрос после перекодировки из win в utf мои данные будут храниться в qstring?или если нет то как их туда перегнать
На мой взгляд, самое изящное объяснение, как работает кодек: http://www.sql.ru/forum/867419/qt-kak-polzovatsya-qtextcodec-dlya-bulochnikov-i-chaynikov
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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