LINUX.ORG.RU

[QSettings, ini-file, кириллические символы] Записывает не сами символы, а их коды. Как побороть эту напасть?


0

0

Приложение должно работать как на винде, так и в линуксе. Поэтому настройки хранятся в ini-файле. При попытке записать изменённые настройки обратно в файл, кириллические и многие «служебные» (в том числе и пробел) символы записываются в виде их кодов, а не символьного представления. Попытки установить QTextCodec для экземпляра QSettings результата не приносят. Сталкивался ли кто с подобной проблемой, и есть ли варианты её решения?

Ответ на: комментарий от Kristi

> void QSettings::setIniCodec ( QTextCodec * codec ) разве не помогает?

Как ни странно, но — не помогает. При задании любых однобайтных кодировок (это я уже от безысходности начал тыкать всё подряд) результат записывается в файл абсолютно одинаковыми кодами символов.

one_more_hokum ★★★
() автор топика

Только что проверил, вот так всё работает, в INI попадают русские буквы в UTF-8:

#include <QApplication>
#include <QSettings>

int main( int argc, char ** argv )
{
	QApplication app( argc, argv );

	QSettings s( "a.ini", QSettings::IniFormat );
	s.setIniCodec( "UTF-8" );
	s.setValue( "mykey", QString::fromUtf8( "Значение" ) );

	return 0;
}

У меня подозрение, что вы забыли использовать QString::fromUtf8() или любую другую кодировку, в которой был сохранён исходник.

Dendy ★★★★★
()
Ответ на: комментарий от Kristi

> вместо «ini» использовать «xml»

Начальство не одобряэ, да и перепахивать много всего (в том числе и документацию) придётся. Плохо!

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от Dendy

> У меня подозрение...

Скопировал твой пример один-в-один, результат --

mykey=пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ

Я сейчас в виндовсе это пробую, если что.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от Divius

> и так всё работает

Периодически будет возникать надобность поправить в ini-шке что-то руками.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

http://img444.imageshack.us/img444/8237/qsettings.png

Проверяйте кодировки, с которыми вы сохраняете исходники с кирилицей. Я выбирал в Студии «UTF-8 without signature». И да - нелатинские символы в исходном коде - зло.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

> нелатинские символы в исходном коде - зло

Не в исходнике, в файле конфигурации.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

> Скопировал твой пример один-в-один

s.setValue( «mykey», QString::fromUtf8( «Значение» ) );

Я сейчас в виндовсе это пробую, если что.



а текст «Значение» у Вас в какой кодировке? А если так попробовать, что будет:
s.setValue( «mykey», QString::fromWCharArray( L"Значение" ) );

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.