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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Как преобразовать строку QString  (Прочитано 19629 раз)
AlphaGh0St
Гость
« Ответ #15 : Февраль 27, 2012, 21:09 »

Если пишешь под Винду, то, походу, проблема только в кодировке.
Вот код, набросал по быстрому.
http://pastebin.com/iX4qKqmc
http://pastebin.com/CeRnT6SM

В поле ввода вводишь строку, жмёшь на кнопку Write. По слоту slotWrite() происходит копирование строки из поля ввода в переменную mainString и запись в файл.
Затем жмёшь на кнопку Read. По слоту slotRead() происходит считывание строки из файла в переменную mainString (типа QString), и в QLabel показывается текст, который содержит эта переменная.
Записан
Bepec
Гость
« Ответ #16 : Февраль 28, 2012, 07:06 »

У парня вопрос - как из 1 кодировки в другую перевести, а тут целая дискуссия пошла Улыбающийся
Записан
mutineer
Гость
« Ответ #17 : Февраль 28, 2012, 11:04 »

У парня вопрос - как из 1 кодировки в другую перевести, а тут целая дискуссия пошла Улыбающийся
Знал бы он в какую
Записан
Bepec
Гость
« Ответ #18 : Февраль 28, 2012, 12:19 »

Ну ладно ладно, сам отвечу.

Если ТС работает в windows, то ему скорее всего нужна windows-1251.

Если же он хочет, чтобы юникод(/) был в файле читабельным, ему нужно поставить bom сектор в начале файла, для автоматического распознавания кодировки просмотрщиками.

А решение проблемы произойдет только после ответов автора на некие вопроса, как то:

1) под какой операционной системой пишешь?

2) какая кодировка тебе нужна?

3) в какой кодировке у тебя сохранены исходники? (если незнаешь, то и не отвечай Подмигивающий)

4) какой IDE работаешь? (Qt Creator/VS)

5) тебе нужно в момент присвоения данных переменной QString вызвать статичную ф-цию QString::fromUtf8(тут как раз массивчик)

и последнее - сделай минимальный компилируемый пример и сбрось в эту тему. Тогда помощь придёт почти мгновенно Подмигивающий

Засим откланиваюсь, ваш Верес  ©
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


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


Просмотр профиля
« Ответ #19 : Февраль 28, 2012, 12:27 »

Можно посмотреть строку при трассировке в QtCreator'e, в окне "Переменные и выражения". Нужно только поставить флажок "Изменить формат отображения/Считать все символы печатными".
И, сдается мне, проблема не в преобразовании текста в различных кодировках, а в самой реализации qDebug. Где-нибудь стоит toLatin1, тупо обрезая таблицу символов.
« Последнее редактирование: Февраль 28, 2012, 12:40 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
« Ответ #20 : Февраль 28, 2012, 12:44 »

qDebug работает превосходно.

Вы ему суёте юникод - он показывает latin1, суёте строку, преобразованную в непонятный формат, без установки соответствующего кодека - он показывает latin1(непонятный формат), что равняется кракозябрям с брякозлоидами.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #21 : Февраль 28, 2012, 14:15 »

Почему у меня qDebug() выводит в консоль русские буквы, ничего не кракозябая?
Записан
Bepec
Гость
« Ответ #22 : Февраль 28, 2012, 14:24 »

Потому что автор читает из файла массив байт, а потом их тупо загооняет в QString без кодеков Подмигивающий
Записан
vbi
Гость
« Ответ #23 : Февраль 28, 2012, 16:47 »

Ну и дискуссия. Я чего-то не мог на форум более суток зайти, писало "Сервер не найден".

На счет qDebug: до этой операции я останавливаю отладчиком и смотрю что в переменную поместилось через отладчик. Так коды символов в QByteArray отличаются от QString.

Значит: пишу под MinGW пока под виндой, но потом хочу прогру и под Linux скомпилить. Кроме того использую мультиязычность. Но в этом маленьком примере и без мультиязычности эта проблема проявляется.

Зачем мне это? я получаю данные от QNetworkReply(), а они в QByteArray - это HTML страница. У меня есть еще переменная QString с киррилическим текстом. Так мне нужно проверить, содержится ли кириллический текст переменной QString в HTML- странице, которая в QByteArray.

Вообще я разработчик парсера Butterfly: http://bibyte.net его же и тестирую Улыбающийся

Вот свой пример выложил: bibyte.net/testString.zip
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #24 : Февраль 28, 2012, 16:55 »

тебе должен подойти один из статических методов QString, какой именно - зависит от кодировки HTML
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
QuAzI
Гость
« Ответ #25 : Февраль 28, 2012, 17:00 »

Хз зачем ставить не утв8 (к-ый по дефолту, кажется)
Который кажется по дефолту в линухах и то не во всех. Потому что если внимательно посмотреть в настройки QtCreator/Designer, то там видно, что для проекта задаётся системная локаль, если вручную не ткнуть в UTF-8, в свойствах проекта. В итоге от греха подальше тыркается и в свойствах проекта и в первых строках main():
Код:
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Чтобы спать спокойно за кодировки на любой платформе. Дополнительно для работы с внешними данными (как например прилетающий QByteArray) инициализируется ещё одна переменная класса QTextCodec, в которой и балуемся с кодировками, не ломая кодировки внутри Qt-проекта.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #26 : Февраль 28, 2012, 18:42 »

Хз зачем ставить не утв8 (к-ый по дефолту, кажется)
Который кажется по дефолту в линухах и то не во всех. Потому что если внимательно посмотреть в настройки QtCreator/Designer, то там видно, что для проекта задаётся системная локаль, если вручную не ткнуть в UTF-8, в свойствах проекта.
В маке тоже утф-8. Системная локаль - личный косяк кретора (из-за к-ого, кстати, не работает коммит в гит русских букв под виндой - он _почему-то_ в файл коммита пишет в цп1251 (о5 таки в локальной), хотя гит насквозь утф-8й). Попытка использовать отличные от utf локали не приводит ни к чему, кроме косяков.
Записан
vbi
Гость
« Ответ #27 : Февраль 29, 2012, 00:50 »

Разобрался вобщем я. Проблема была вот в чем: Ошибка в Qt 4.8.0 Когда запускаю отладку - выводит кракозябры. Но когда просто запускаю приложение (без отладки) работает нормально, конвертирует в кириллицу. Так что что-то с отладкой.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


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


Просмотр профиля
« Ответ #28 : Февраль 29, 2012, 10:17 »

Это называется "разобрался"? В замешательстве
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
vbi
Гость
« Ответ #29 : Февраль 29, 2012, 13:23 »

Да. В версии 4.8.0 видимо в режиме отладки не правильно работает QTextCodec. Будем ждать обновлений от Nokia когда они исправят проблему. Не буду я копатся в их коде. Некогда мне.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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