Название: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: NoIdea от Декабрь 08, 2010, 05:26 Есть ini-файл (QSettings) в кодировке Windows-1251 и в нём встречаются русские группы и ключи.
Задача считать его под любой платформой. Щаз реализованно под виндой и то не без проблем. К примеру, есть такой ini: Код: [group] Пример кода считывающего из него значения: Код: #include <QtGui/QApplication> Выводит: Код: "Считанные значения:" "Группа" "Значение" А под *nix никак не хочет работать и не представляю что там за магия с кодировками... Уж как только не пробовал конвертить этот group - ничего не выходит Вообще возможностей по работе с ini в QSettings не достаточно, думаю придётся искать другой парсер или написать самому, потому как в ini встречается ключи без имени или ключи с одинаковым названием - мультилайн. Так что если кто знает что приличное - советуйте! P.S.> на форуме похоже тоже траблы с кодировкой кириллистических знаков в теге code=cpp, code=ini и т.д. P.P.S.>Прилагаю тестовый проект Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: BRE от Декабрь 08, 2010, 07:57 void QSettings::setIniCodec ( QTextCodec * codec )
void QSettings::setIniCodec ( const char * codecName ) Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: NoIdea от Декабрь 08, 2010, 20:48 setIniCodec() использую, что видно из примера...
Вот что получается... Данный код работает под win: Код: ini->beginGroup(group.toLocal8Bit()); А под *nix работает только: Код: qDebug() << ini->value("Группа/Значение").toString(); Вот этого я и не понимаю, ведь в обоих случаях строка должна быть в одной и той же кодировке... в чём тут проблема? :( P.S.> В примере первого поста QTextCodec::setCodecForLocale(codec); - не нужно - косяк. Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: BRE от Декабрь 08, 2010, 21:01 Вот объясни мне пожалуйста, что по твоему делает этот кусок кода и какие преобразования он выполняет в каких строках твоей программы:
Код
Как только ты ответишь на этот вопрос, у тебя отпадет желание включать эти строки в свои программы, навсегда. [offtop] Откуда пошла эта мода? [/offtop] Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: BRE от Декабрь 08, 2010, 21:38 Код
Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: NoIdea от Декабрь 08, 2010, 22:39 Вау! Работает! Спасибо! ;D
А по поводу: Вот объясни мне пожалуйста, что по твоему делает этот кусок кода и какие преобразования он выполняет в каких строках твоей программы: Код
Как только ты ответишь на этот вопрос, у тебя отпадет желание включать эти строки в свои программы, навсегда. QTextCodec::setCodecForTr(codec); Устанавливает кодек для tr() исходники в Windows-1251 и language-файлы скорее всего тоже будут... или это не верное решение для портируемого софта? По дефолту там Latin-1 тоже ведь не гуд... QTextCodec::setCodecForLocale(codec); Ну менять локаль это явно лишнее это я уже осознал :) QTextCodec::setCodecForCStrings(codec); устанавливает кодек для строк-переменных, т.е. если они в cp1251 изначально то их не надо конвертить перед вывоводом на экран, но обычно им всё равно требуется tr() так что тоже излишне. [offtop] Откуда мода? Как знать... Мне приятель посоветовал, мол всё будет в одной кодировке... :) [/offtop] Название: Re: QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: deMax от Август 28, 2013, 15:51 Код
Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: kambala от Август 28, 2013, 18:14 использовать правильный кодек. выше ж все написано.
Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: deMax от Август 29, 2013, 08:27 использовать правильный кодек. выше ж все написано. Я запустил пример из этой ветки(Автор: BRE ). Только файл config.ini превратился в это (записи в настройки не было)Код: [group] Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: lit-uriy от Август 29, 2013, 21:26 Да это косяк трльтеховцев и исправлять они его не намерены, им кроме англицкого языка ничего не надо.
Этот ты ещё пробелы в именах секций не совал, они сразу в процентную кодировку преобразуются не понятно с какого перепугу. Плюс обратные слеши в значениях ключей QSettings не понимает - тоже школьный курс программирования. Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: deMax от Август 30, 2013, 08:48 А есть альтернатива QSettings ? Чтобы поддерживал русский язык, хранился в памяти, сохранял при деструкторе или вызове метода Save().
p.s. сам наверно напишу когда время появиться. Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: Bepec от Август 30, 2013, 09:10 Как показывает моя практика - гораздо лучше использовать латиницу в таких делах.
Проще, быстрее, кроссплатформенно, возможность отредактировать в любом редакторе не думая о кодировках :) PS не гонитесь слишком за "человеческим редактированием". При увеличении количества настроек до 30 - проще написать конфигуратор, чем мучать пользователя. Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: deMax от Август 30, 2013, 14:19 Как показывает моя практика - гораздо лучше использовать латиницу в таких делах. Во первых мы Русские люди, программа для Русских. У меня в ключах в группах встречаются имена объектов(есть объекты на Русском), пользователь вряд ли полезет в этот файлНазвание: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: Bepec от Август 30, 2013, 14:39 1) Я высказался по поводу BOM.
2) Ну я не знаю что у вас там и как с русским. По идее всё должно работать, главное что бы вы с кодировками не путались сами. PS если у вас пользователю туда не лезут - плюньте на человеко читаемый формат :D Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: lit-uriy от Август 30, 2013, 18:47 >>Чтобы ..., хранился в памяти, ...
А нужен ли тебе QSettings в таком случае? Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: deMax от Июнь 06, 2017, 12:36 >>Чтобы ..., хранился в памяти, ... Не очень нужен, да и красиво будет через потоки:А нужен ли тебе QSettings в таком случае? Код: operator>>(int){}... Название: Re: [РЕШЕНО] QSettings - ini - русские группы и ключи - проблема с кодировками Отправлено: kambala от Июнь 06, 2017, 12:39 надо версию какую-то записывать чтобы знать формат файла
|