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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Работа с ini файлами под Qt 4.4 и выше (компонент TDataFile)  (Прочитано 33916 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #30 : Октябрь 15, 2008, 20:08 »

Интересно. Попробуй 1252.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #31 : Октябрь 15, 2008, 20:36 »

Ты гений  Смеющийся Спасибо!  Веселый
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #32 : Октябрь 15, 2008, 20:41 »

В винде по умолчанию 1252, приходится вручную исправлять на 1251 в реестре.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #33 : Октябрь 26, 2008, 14:43 »

Просьба помочь, кто знает.
При переходе в Linux возникла еще одна проблема с конвертацией русских строк, считанных из ini файлов.
В Линухе, вместо:
Код:
m_codec = QTextCodec::codecForName("windows-1252");
устанавливаю кодек (или KOI8-R):
Код:
m_codec = QTextCodec::codecForName("UTF-8");
Но Qt русские строки считывать не хочет, никак не могу понять, где я ошибаюсь?
Алгаритм приблизительно такой:
Код:
#ifdef Q_OS_WIN32
m_codec = QTextCodec::codecForName("windows-1252"); //Настраиваем кодек
#endif
#ifdef Q_OS_LINUX
m_codec = QTextCodec::codecForName("UTF-8");
#endif

.............

char sz[1024];
to_RUS( m_pINIfile->value( sKeyName, sDefault ).toString(), sz ); //тут считываем русскую строку из ini
QString sReturnedString = QString::fromLocal8Bit( sz ); //В винде здесь уж русская строка, в Линухе - кракозябры

.............

void to_RUS( QString s, char *ascii )
{
QByteArray ba = m_codec->fromUnicode(s);
memcpy( ascii,ba.data(),ba.size() );
ascii[ba.size()] = 0;
}
Помогите, плиз....  Злой
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #34 : Октябрь 28, 2008, 00:09 »

1. В линухе у тебя какая кодировка локали?

2. Если кодировка локали UTF-8, то использовать fromLocal8Bit() походу неправильно.

3. А в какой кодировке у тебя сделан сам ini файл?
Записан

Собираю информацию по крупицам
http://webhamster.ru
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #35 : Октябрь 28, 2008, 01:20 »

Цитировать
1. В линухе у тебя какая кодировка локали?
Точно не знаю, а как это посмотреть?  Подмигивающий
Код:
2. Если кодировка локали UTF-8, то использовать fromLocal8Bit() походу неправильно.
Кодировка русской мандривы (та, что по умолчанию). Попробую обойтись без fromLocal8Bit()....  В замешательстве
Цитировать
3. А в какой кодировке у тебя сделан сам ini файл?
Он создавался под виндой, походу - 1252.  Крутой
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #36 : Октябрь 28, 2008, 07:16 »

Гы. Если он в кодировке 1252, то и не нужно никаких ifdef. Улыбающийся Код будет одинаковый под обеими осями.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #37 : Октябрь 28, 2008, 11:22 »

2 panter_dsd
ini файл создан под виндой, но при просмотре его под Линухом русский шрифт не читабилен (даже если просто смотреть его едитом).
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #38 : Октябрь 28, 2008, 12:19 »

Что у тебя показывает команда locale?
Походу у тебя просто локаль не utf8.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #39 : Октябрь 28, 2008, 15:52 »

locale показывает:
Цитировать
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Записан
BRE
Гость
« Ответ #40 : Октябрь 28, 2008, 16:37 »

Вот так попробуй:
Код:
m_codec = QTextCodec::codecForName( "windows-1252" );

QString val = m_codec->toUnicode( m_pINIfile->value( sKeyName, sDefault ).toByteArray() );
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #41 : Октябрь 28, 2008, 17:00 »

Так уже пробовал. Не помогает.
В этом случае даже под виндой отказывается русский текст из ини читать...
Записан
BRE
Гость
« Ответ #42 : Октябрь 28, 2008, 17:32 »

Так уже пробовал. Не помогает.
В этом случае даже под виндой отказывается русский текст из ини читать...

Вот тестовый пример, под linux работает.
Строка в ini файле в кодировке windows-1251.
Код:
#include <QCoreApplication>
#include <QSettings>
#include <QTextCodec>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
qDebug("Start...");

QSettings s( "Company", "tst" );

QTextCodec *codec = QTextCodec::codecForName( "windows-1251" );

QVariant v = s.value( "value1", "Default value1" );

QString val = codec->toUnicode( v.toByteArray() );
qDebug() << val;

return 0;
}

Если будет нужно, сброшу и ini-файл.  Смеющийся

Еще обрати внимание на defaultValue в QSettings::value(), кодировки должны совпадать в файле исходника и ini-файле.
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #43 : Октябрь 28, 2008, 17:48 »

Всем спасибо, сам разобрался.
Вот мой окончательный вариант:
Код:
m_codec = QTextCodec::codecForName("windows-1251");
*sReturnedString = m_codec->toUnicode( m_pINIfile->value( sKeyName, sDefault ).toByteArray() );
Проверил, работает и под Линухом и под Виндой.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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