Russian Qt Forum

Qt => Общие вопросы => Тема начата: Maxz от Июнь 22, 2013, 23:49



Название: Qt 5.x - если исходники в кодировке Win-1251
Отправлено: Maxz от Июнь 22, 2013, 23:49
Собрался таки с духом перейти на Qt 5.0.2 c Qt 4.8.
Стал пересобирать проект (большой), напоролся на несколько костылей, но они решились быстро. Но выяснилась проблема - как выяснилось, с 5-ой версии больше не будут поддерживаться исходники в любой иной кодировке, кроме как в юникоде (тут написано - http://www.prog.org.ru/index.php?topic=24187.msg172513#msg172513 ). А мне это как-то влом - перегонять кучу файлов (исходники в Win-1251) в юникод, а потом еще маяться с обратным перекодированием (пользуюсь старым текстовым редактором, он UTF-8 плохо переваривает). Или пользоваться лингвистом (проект чисто для русскоязычных). Решение проблемы собственно такое:

Где-то объявляем глобальную переменную и функцию для перекодирования:
Код:
extern  QTextCodec      *_codec;            //! кодек для программирования
QString FTr(QByteArray __rustext);             //! перевод в UTF-8 для программирования

Далее реализация:
Код:
QTextCodec  *_codec=QTextCodec::codecForName("Windows-1251");

//-----------------------------------------------------
//! преобразование Windows-1251 в UNICODE (UTF-8)
//-----------------------------------------------------
QString FTr(QByteArray __rustext){
  return _codec->toUnicode(__rustext);
}

Ну и далее по всему текстку вместо использования Qt-шной tr() делаем нечто такое:
Код:
QString _text=FTr("Мой текст на русском");
QString _text2=FTr(QByteArray("Текст на русском с переменными ").append(_peremennaja).append(" еще текст"));
QMessageBox::warning(0, FTr("Ошибка"),_text+FTr("Не могу создать файл"));

Может быть, кому-то пригодится


Название: Re: Qt 5.x - если исходники в кодировке Win-1251
Отправлено: kambala от Июнь 23, 2013, 00:01
костыль ужаснейший. если вдруг тому, кто использует подобный метод, понадобится перевести программу на другой язык, то он не сможет этого сделать. намного проще перейти на юникод (на дворе 2013 год между прочим), сконвертировать все файлы одним махом (под виндой должно существовать что-то типа iconv) и установить современный текстовый редактор (например sublime text или notepad++).

еще и переменную в метод передаешь по значению вместо константной ссылки.


Название: Re: Qt 5.x - если исходники в кодировке Win-1251
Отправлено: sergek от Июнь 23, 2013, 12:04
Это решает все проблемы:
Цитировать
I highly recommend choosing the former option: use UTF-8 in your source code.
http://www.macieira.org/blog/2012/05/source-code-must-be-utf-8-and-qstring-wants-it/ (http://www.macieira.org/blog/2012/05/source-code-must-be-utf-8-and-qstring-wants-it/)
Это поможет:
http://anton-pribora.ru/recoder/ (http://anton-pribora.ru/recoder/)