LINUX.ORG.RU

QChar и русские символы


0

0

Работаю под ASPLinux 11.2. Кодировка в системе utf-8. Qt-4.2.2.
В начале программы устанавливаю: 
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

С русским языком все прекрасно до тех пор пока не пытаюсь использовать QChar для работы с русскими символами. 
Например QChar c('Б') (или любой другой русский символ) - выводит знак вопроса. 

При компиляции ругается:
warning: multi-character character constant
Если подставляю английские символы никаких проблем, все работает.

В чем может быть проблема?

Re: QChar и русские символы

'б' в утф-8 - это ДВА байта! Откуда Qt знает, что оно у тебя в утф8? Попробуй так: QChar c =QString::fromLocal8Bit("б")[0];

krum ()

Re: QChar и русские символы

Есть мнение, что за использование не-ASCII символов в исходнике надо чего-нибудь отрезать разработчику :) Как минимум надо писать L'б' (тип - wchar_t), а еще лучше грузить из ресурсов и все.

anonymous ()
Ответ на: Re: QChar и русские символы от anonymous

Re: QChar и русские символы

Спасибо всем ответившим! 

После и на основе ваших советов, было совершено много глупостей :)), но в конце концов остановился на двух:
1. В файл проекта прописал: 

DEFINES += QT_NO_CAST_FROM_ASCII \
            QT_NO_CAST_TO_ASCII

В результате исправно работавший код отказался работать, выяснилось 
что 
error: ‘QString::QString(const char*)’ is private
и по всей программе пришлось менять QString("QWER") на QString::fromAscii("QWER"). 
Повлияло ли это на конечный результат не знаю - сейчас это выяснять нет сил.

2. Собственно русские символы удалось увидеть следующим образом: 

  QChar t(L'Ы');
  QTextCodec * textCodec = QTextCodec::codecForName("UTF-8");
  QByteArray ba = textCodec->fromUnicode(QString(t));
  QMessageBox::warning(this,tr(""),tr(ba)); 

Теперь осталось только решить вопрос - это нормально, или есть вариант попроще?

vikeng ()
Ответ на: Re: QChar и русские символы от vikeng

Re: QChar и русские символы

До главы i18n в книге по Qt пока ещё не дошёл, но интуитивно чувствую, что реализация должна быть примерно как в gettext.
Как заметили выше, в тексте программы использовать только английский текст, а другие языки подгружать из ресурсов!

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