Russian Qt Forum

Qt => Вопросы новичков => Тема начата: UltraPenguin от Март 31, 2014, 09:41



Название: Избитая тема с кодировками
Отправлено: UltraPenguin от Март 31, 2014, 09:41
Доброго времени суток!

Столкнулся с непонятным (для меня ;)) поведением русскоязычного текста в линукс версии проекта.
Собственно в проекте есть n-ное количество текстовых констант на русском, как пример - текст какого-либо предупреждения.
При прогоне программы первое появление окна с предупреждением представляет собой сплошные кракозябры. Но если повторно вызвать это окно (не перезапуская всего приложения) русский текст начинает нормально отображаться :-\

Иногда если исправить какую-нибудь из текстовых констант, все надписи при следующем запуске - кракозябры. Однако, на второй запуск все исправляется.

Может есть какие-то особенности работы с русским из-под линукса в Qt?

PS кодировка локали системы и всех исходников - UTF-8, пытался также устанавливать кодировку вручную командами:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); 
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
профита какого-либо от них вообще не заметил.

Знаю про лингвиста, но программа - это порт с другой IDE, поэтому буду переводить все тексты с его помощью только если не найду решения (впрочем в любом случае буду, но позже)


Название: Re: Избитая тема с кодировками
Отправлено: VanDerSam от Март 31, 2014, 14:43
А каким способом вы из строковой константы формируете объект QString? Пример можете привести?


Название: Re: Избитая тема с кодировками
Отправлено: UltraPenguin от Март 31, 2014, 17:15
Код:
QString("Тут текст");
или
Код:
QString mes = "Тут сообщение";


Название: Re: Избитая тема с кодировками
Отправлено: kambala от Март 31, 2014, 18:22
используй QString::fromUtf8() или trUtf8()


Название: Re: Избитая тема с кодировками
Отправлено: arhiv6 от Март 31, 2014, 18:25
У вас просто опечатка. Надо так:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
Проверенно неоднократно, работает.


Название: Re: Избитая тема с кодировками
Отправлено: UltraPenguin от Апрель 01, 2014, 12:14
используй QString::fromUtf8() или trUtf8()

Да fromUtf8() помогает, спасибо большое!  :D
Получается что из-за того, что кодировка внутреннего хранения QString не utf8, и если исходники в utf8, нужно всегда использовать QString::fromUtf8() ?  :P

Цитата: arhiv6
Надо так:
Код:
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
Проверенно неоднократно, работает.

Не знаю, в моем случае не прокатило :)


Название: Re: Избитая тема с кодировками
Отправлено: kambala от Апрель 01, 2014, 12:34
используй QString::fromUtf8() или trUtf8()

Да fromUtf8() помогает, спасибо большое!  :D
Получается что из-за того, что кодировка внутреннего хранения QString не utf8, и если исходники в utf8, нужно всегда использовать QString::fromUtf8() ?  :P
да. в Qt 5 необходимости в этом уже нету.