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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Проблема с записью в ini файл  (Прочитано 26209 раз)
prefetch
Гость
« Ответ #15 : Декабрь 01, 2008, 17:35 »

Получается что-то вида:
Код:
str1=\x430\x431\x432\x433\x434....
str2=\x44d\x44e\x44f...
Попробуй тотже код, только не делай:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-1251"));

Теперь выходит
Код:
str1=\xe0\xe1\xe2\xe3\xe4....
str2=\xfd\xfe\xff...

Т.е. коды кириллических символов кодировки Windows-1251
Записан
BRE
Гость
« Ответ #16 : Декабрь 01, 2008, 17:42 »

Т.е. место строки "абвгд....", в файл записывается в виде "xe0\xe1\xe2\xe3\xe4...."?
Записан
prefetch
Гость
« Ответ #17 : Декабрь 01, 2008, 17:55 »

Т.е. место строки "абвгд....", в файл записывается в виде "xe0\xe1\xe2\xe3\xe4...."?

Да  Грустный
Записан
BRE
Гость
« Ответ #18 : Декабрь 01, 2008, 18:03 »

Т.е. место строки "абвгд....", в файл записывается в виде "xe0\xe1\xe2\xe3\xe4...."?

Да  Грустный
Попробовал у себя, такая же фигня.  Непонимающий  Строит глазки
Буду пробовать дальше...
« Последнее редактирование: Декабрь 01, 2008, 18:11 от BRE » Записан
prefetch
Гость
« Ответ #19 : Декабрь 01, 2008, 18:30 »

Т.е. место строки "абвгд....", в файл записывается в виде "xe0\xe1\xe2\xe3\xe4...."?
Да  Грустный
Попробовал у себя, такая же фигня.  Непонимающий  Строит глазки
Буду пробовать дальше...

Попробовал на другой машине с Qt 4.3.3 собранной вручную с опцией static, то же не работает.
На линукс с Qt 4.4.4-snapshot 20.11.08 та же ситуация  Грустный
Записан
BRE
Гость
« Ответ #20 : Декабрь 01, 2008, 18:39 »

Т.е. место строки "абвгд....", в файл записывается в виде "xe0\xe1\xe2\xe3\xe4...."?
Да  Грустный
Попробовал у себя, такая же фигня.  Непонимающий  Строит глазки
Буду пробовать дальше...

Попробовал на другой машине с Qt 4.3.3 собранной вручную с опцией static, то же не работает.
На линукс с Qt 4.4.4-snapshot 20.11.08 та же ситуация  Грустный
Залез в исходники, похоже дальше будет так, т.е. все строки будут сохраняться Escape-последовательностями.

Как вариант остается использование QSettings::registerFormat, и писать-читать как нужно.
« Последнее редактирование: Декабрь 01, 2008, 18:42 от BRE » Записан
prefetch
Гость
« Ответ #21 : Декабрь 01, 2008, 18:52 »

Залез в исходники, похоже дальше будет так, т.е. все строки будут сохраняться Escape-последовательностями.
Как вариант остается использование QSettings::registerFormat, и писать-читать как нужно.
Жаль, если это так, не хотелось бы заморачиваться с написанием своих ReadFunc и WriteFunc.
Можно ли это считать багом Qt? Или это просто такая особоя фича?
Записан
BRE
Гость
« Ответ #22 : Декабрь 01, 2008, 19:08 »

Можно ли это считать багом Qt? Или это просто такая особоя фича?
Фича, я думаю, так как сделанно специально.
Лень скачивать старые исходники Qt, как нибудь нужно глянуть. Сам смотрел 4.4.3.
« Последнее редактирование: Декабрь 01, 2008, 19:10 от BRE » Записан
prefetch
Гость
« Ответ #23 : Декабрь 01, 2008, 21:07 »

В свежем снапшоте появились удивительные функции:
Код:
void QSettings::setIniCodec ( QTextCodec * codec )
и
void QSettings::setIniCodec ( const char * codecName )

Цитирую:
Цитировать
Sets the codec for accessing INI files (including .conf files on Unix) to codec. The codec is used for decoding any data that is read from the INI file, and for encoding any data that is written to the file. By default, no codec is used, and non-ASCII characters are encoded using standard INI escape sequences.

Надо посмотреть случилось чудо или нет  Улыбающийся
« Последнее редактирование: Декабрь 01, 2008, 21:08 от prefetch » Записан
prefetch
Гость
« Ответ #24 : Декабрь 02, 2008, 16:21 »

Надо посмотреть случилось чудо или нет  Улыбающийся

Чудо свершилось, проблема решена.  Улыбающийся
Записан
spirit
Гость
« Ответ #25 : Декабрь 02, 2008, 19:08 »

и в чем был косяк?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #26 : Декабрь 02, 2008, 19:23 »

и в чем был косяк?

Очевидно prefetch заюзал QSettings::setIniCodec (Qt 4.5) Подмигивающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spirit
Гость
« Ответ #27 : Декабрь 02, 2008, 19:24 »

аааа  Смеющийся
Записан
prefetch
Гость
« Ответ #28 : Декабрь 02, 2008, 23:02 »

и в чем был косяк?
Очевидно prefetch заюзал QSettings::setIniCodec (Qt 4.5) Подмигивающий

Так точно, из снапшота от 1 декабря сего года.
Кроме того, теперь и читать из такого файла стало намного проще.
К примеру:
Код:
QSettings settings("test.ini", QSettings::IniFormat);	
settings.setIniCodec("windows-1251");
QString str;
settings.setValue("str1", "абвгд");
str = settings.value("str1", "");
settings.setValue("str2", str);
QMessageBox::warning(NULL, "hello", str);
Записан
Alexkvs
Гость
« Ответ #29 : Июль 05, 2009, 19:18 »

Цитировать
Так точно, из снапшота от 1 декабря сего года.
Кроме того, теперь и читать из такого файла стало намного проще.
К примеру:
Код:
QSettings settings("test.ini", QSettings::IniFormat);	
settings.setIniCodec("windows-1251");
QString str;
settings.setValue("str1", "абвгд");
str = settings.value("str1", "");
settings.setValue("str2", str);
QMessageBox::warning(NULL, "hello", str);

У меня что-то такая конструкция не работает (всё равно эскейп последовательностями пишет символы). Использую Qt 4.5.0 commercial.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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