Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: lighting от Май 04, 2010, 16:16



Название: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lighting от Май 04, 2010, 16:16
Сохраняю некоторые строки в QSettings, по совету кого-то с этого форума для получения читаемого файла ini использую кодировку windows-1252. В файл пишется все нормально, но когда я считываю из из ini файла обратно в QString получаются какие-то кракозябли вида Êóëüøà Åâãåíèé Âàñèëüåâè÷.
Подскажите каким образом преобразовать их обратно к читаемому виду. Кусок кода, в котором данные считываются обратно вот:
Код
C++ (Qt)
const char* INI_CODEC_NAME = "windows-1252";
...
int QAddressBook::loadAddressbook()
{
   QSettings settings("addressbook.ini",QSettings::IniFormat);
   settings.setIniCodec(INI_CODEC_NAME);
   int ContactCount = settings.value("General/ContactCount").toInt();
   for (int i = 1; i <= ContactCount; i++)
   {
       settings.beginGroup("Contact"+QString::number(i));
       currentContact.setName(settings.value("Name").toString());
       ...
       settings.endGroup();
   }
   return 1;
}
 


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: GreatSnake от Май 04, 2010, 16:21
Попробуй
currentContact.setName(settings.value("Name").toString().toLocal8Bit());


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lighting от Май 04, 2010, 16:27
не помогло, только кракозябли другими стали. toLatin1 также не помогло.


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: garryHotDog от Май 04, 2010, 17:24
вот, должно помочь:
Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
...
...
...
// чтение из ini
QString str=setting.value("group/paramName").toString();
 

и QSettings можно использовать без beginGroup:
Код
C++ (Qt)
       setting.setValue("group/paramName",ui.checkBox->isChecked());
 


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lit-uriy от Май 04, 2010, 18:07
>>settings.setIniCodec(INI_CODEC_NAME);
попробуй установить явно QTextCodec, у меня работает

garryHotDog, установка кодеков, что ты привёл ни как не влияет на работу QSettings. Мало того кодек не правильный.


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: garryHotDog от Май 04, 2010, 18:09
Цитировать
установка кодеков, что ты привёл ни как не влияет на работу QSettings. Мало того кодек не правильный.
у меня работает на Xp,Vista,W7, Ubuntu, CentOS...


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lit-uriy от Май 04, 2010, 18:22
а ты кодировку файла сделай, как у автора поста - 1252 (не 1251) и проверь ;)


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: garryHotDog от Май 04, 2010, 18:50
ааа теперь понял, так может изначально лучше поставить 1251 и не парится!? ;D


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lighting от Май 04, 2010, 22:08
Цитировать
попробуй установить явно QTextCodec, у меня работает
Вот так?
Код
C++ (Qt)
   QTextCodec *codec = QTextCodec::codecForName(INI_CODEC_NAME);
   settings.setIniCodec(codec);
 
У меня не заработало - никаких изменений я не заметил.
Цитировать
так может изначально лучше поставить 1251 и не парится!?
Оно конечно лучше, но вот в такой кодировке QSettings пишет ??????? вместо русских символов в Ini файл, а 1252 пишет вполне читаемый файл.


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lit-uriy от Май 04, 2010, 23:48
>>INI_CODEC_NAME = "windows-1252";
обрати внимание: ты пишешь с маленькой буквы. Может в этом причина?


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: p166 от Май 05, 2010, 08:58
А может все таки "windows-1251"?


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lighting от Май 05, 2010, 10:49
мои извинения всем принявшим участие в этой теме - проблема была в том что когда-то давно я добавил строку
main.cpp
Код
C++ (Qt)
   QTextCodec *tc =QTextCodec::codecForName("Windows-1251");
   QTextCodec::setCodecForTr(tc);
 
с этим и были связаны проблемы при отображении. Теперь насущной осталась только проблема с QSettings, который не создает читаемые ini файлы в кодировке 1251.


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lit-uriy от Май 05, 2010, 12:00
так, давай сначала решим, в какой кодировке файл:
Windows-1251
или всё же
Windows-1252
?


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: lighting от Май 05, 2010, 13:59
еще раз мои извинения - проблемы с кодировкой в файле видимо так-же были вызваны тем что в main.cpp была выставлена другая кодировка. Во всяком случае сейчас в файл все также пишется нормально.


Название: Re: Проблема с кодировкой при считывании из QSettings в QString
Отправлено: garryHotDog от Май 05, 2010, 15:59
это называется магия ;D