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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Unicode в drawText  (Прочитано 20105 раз)
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #15 : Ноябрь 22, 2007, 21:49 »

Это не работает.. всеравно каракули.

Полный код в студию. У меня работает все прекрасно!

BWT: какая ось?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #16 : Ноябрь 22, 2007, 21:53 »

Это не работает.. всеравно каракули.

Полный код в студию. У меня работает все прекрасно!

BWT: какая ось?

Ось линух, код на другом компе, на данный момент передать его нечем.
Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
в срр класа главного окна, в каком и рисую текст.
Может в другом месте нужно писать ?
Записан
Вячеслав
Гость
« Ответ #17 : Ноябрь 22, 2007, 21:57 »

когда делаю tr("русский текст") всеравно кодировка кривая..
Меня вариант
QString str;
QTextCodec::codecForLocale()->toUnicode(str);
Полностью устраивает..
так и должно быть (про кодировку) tr подставляет строку из внешнего qm файла Подмигивающий
Тебе-же показали

QTrnaslator *trans=new QTranslator;
trans->load("my_app_ru.qm");
qApp->installTranslator(trans);
QString ru=tr("en");

Ы ? и посмотреть на lupdate/lrelease/linguist'а
и IMHO динамический codecForLocale() неверен - исходник-то в одной кодировке .... А если локаль будет другая ? Вариант xep'а лучшее Подмигивающий
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #18 : Ноябрь 22, 2007, 21:58 »

Ось линух, код на другом компе, на данный момент передать его нечем.
Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
в срр класа главного окна, в каком и рисую текст.
Может в другом месте нужно писать ?

Попробуй написать QTextCodec::codecForName("utf8"); вместо QTextCodec::codecForName("Windows-1251") - это я указал например
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Вячеслав
Гость
« Ответ #19 : Ноябрь 22, 2007, 21:58 »

Это не работает.. всеравно каракули.

Полный код в студию. У меня работает все прекрасно!

BWT: какая ось?

Ось линух, код на другом компе, на данный момент передать его нечем.
Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
в срр класа главного окна, в каком и рисую текст.
Может в другом месте нужно писать ?
А ты уверен что у тебя в линуксе 1251 ?! Там обычно Utf8 или KOI8-r ....
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #20 : Ноябрь 22, 2007, 22:06 »

Ось линух, код на другом компе, на данный момент передать его нечем.
Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
в срр класа главного окна, в каком и рисую текст.
Может в другом месте нужно писать ?

Попробуй написать QTextCodec::codecForName("utf8"); вместо QTextCodec::codecForName("Windows-1251") - это я указал например

Да, так QTextCodec::codecForName("utf8") работает, Спасибо, так действительно удобнее
Записан
Swappp
Гость
« Ответ #21 : Ноябрь 22, 2007, 22:13 »

когда у тебя несколько программистов, у каждого своя любимая среда разработки/ос и т.д., охреительное занятие потом искать какой сырец был сохранён в цп1251 Улыбающийся
Ну это можно и нужно решать административными методами Улыбающийся тем более сейчас любая современная среда и редактор поддерживают UTF-8. А комментарии все наверно тоже исключительно на английском пишут?
Цитировать
и сырцы весят вдвое больше...
Правда? В UTF-8 все символы <=127 кодируются одним байтом. В два раза больше исходники будут весить в случае, если они полностью написаны на русском, без использования знаков препинания, цифр, пробелов и т.п. Улыбающийся либо если используется много символов с кодом >2047, но это уже не кириллица.
Цитировать
и кому это вообще надо - следить за кодирровкой в сорцах?
Следить не надо, ведь есть внутренние соглашения, по стилю кодинга и т.п. (или каждый лепит код кто во что горазд? а потом, в случае ухода кого то из команды, при необходимости внести изменения в написаный им код, его переписывают с нуля?), так вот это всего лишь еще один пункт в нем.
Цитировать
а когда _в принципе_ нужен только один язык, всё-равно надо пользоваться тр() - вот!
Зачем?
p.s. сам всегда пишу с tr() Улыбающийся
« Последнее редактирование: Ноябрь 22, 2007, 22:15 от Swappp » Записан
Alex03
Гость
« Ответ #22 : Ноябрь 23, 2007, 07:36 »

Swappp +1


Всем кто чтото не понимает в кодировках в Qt читать документик QTDIR/doc/html/i18n.html

Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #23 : Ноябрь 24, 2007, 02:40 »

Всем Спасибо!
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #24 : Ноябрь 26, 2007, 07:21 »

Всем Опять Привет!
Теперь я читаю базу данных MYSQL
достаю оттуда масив QString"ов и ллю на форму в textDraw
и русские символы не отображаются.. одни знаки НепонимающийНепонимающийНепонимающийНепонимающий??
И перепробовал базу сохранять в всех кодировках..
и QTextCodec настраивал, ничего не выходит
Как выправить такое ?
« Последнее редактирование: Ноябрь 26, 2007, 07:23 от IGHOR » Записан
Вячеслав
Гость
« Ответ #25 : Ноябрь 26, 2007, 09:24 »

Всем Опять Привет!
Теперь я читаю базу данных MYSQL
достаю оттуда масив QString"ов и ллю на форму в textDraw
и русские символы не отображаются.. одни знаки НепонимающийНепонимающийНепонимающийНепонимающий??
И перепробовал базу сохранять в всех кодировках..
и QTextCodec настраивал, ничего не выходит
Как выправить такое ?
поиск рулит по форуму http://prog.org.ru/forum/index.php/topic,4344.0.html
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #26 : Ноябрь 27, 2007, 19:03 »

Всем СПАСИБО за помощь. Все разобрался.
Удачи Всем!!
Записан
Cyrax
Гость
« Ответ #27 : Декабрь 18, 2007, 18:04 »

Что-то не понятно совсем.
Все кодировки базы данных MySQL 5 настроены на cp1251 - кодировка БД по умолчанию, кодировки таблиц, полей. В базу данных заносится информация на русском языке, например, слово "Монитор".
Далее я в php-скрипте выполняю команды:
Цитировать
mysql_query ("set names 'cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
После чего получаю нормальный русский текст, который вывожу на web-страницу.

теперь то же самое делаю в Qt-программе с той же самой БД, с той же таблицей и записью:
Цитировать
QSqlQuery q1("set names 'cp1251'");
bool t = q1.exec();  // возвращает true
QSqlQuery q2("set collation_connection='cp1251_general_ci'");
t = q2.exec();  // возвращает true
   
QSqlQuery query("SELECT * FROM article");
t = query.exec();    // возвращает true
query.first();
QSqlRecord rec = query.record();   
QString txt = rec.value("fullName").toString();
   
dep.setWindowTitle(txt);

В результате получаю в заголовке козяблики (но не вопросительные знаки). Все 3 запроса выполняются нормально (exec() возвращает true).
Предварительно устанавливаю:
Цитировать
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));

Если в последней строке фрагмента кода txt перегнать в latin1:
Цитировать
dep.setWindowTitle(txt.toLatin1());
то получаю то, что нужно: "Монитор".

Если убрать установку кодеков в Windows-1251, то в случае с "dep.setWindowTitle(txt.toLatin1())" получаю те же козяблики, что с установкой кодеков, но без перегона в Latin1.

Если запросы, устанавливающие русскую кодировку для соединения, убрать, то в обоих случаях ("dep.setWindowTitle(txt);" и "dep.setWindowTitle(txt.toLatin1());" получаю 7 вопросительных знаков...

Вот получает объект QSqlQuery от сервера 7 байтов в кодировке cp1251. Далее через QVariant загоняю их в QString. При этом он "знает", что получил байты в cp1251, поскольку кодеки настроены на cp1251. Тем не менее, получаю что-то, что приходитося перегонять в Latin1 для того, чтобы получить cp1251...
« Последнее редактирование: Декабрь 18, 2007, 18:11 от Cyrax » Записан
Вячеслав
Гость
« Ответ #28 : Декабрь 18, 2007, 18:35 »

РРРРРРРРР !!!!!!!!!!!!
QVAriant работает в данном случае с QString'om
QStirng - это _всегда_ юникод без всяких "помнит о кодеке"
Поидее heuristicCodec в mysql драйвере (плагине) _должен_ из 1251 сделать юникод , если нет - то можно 1) попробывать вытащить _какой_ кодек он (плагин) использует и допинать его в нужном направлении
2) почитать ссылку 3 постами выше
Ы ?
Записан
Cyrax
Гость
« Ответ #29 : Декабрь 18, 2007, 19:13 »

Цитировать
Поидее heuristicCodec в mysql драйвере (плагине) _должен_
Должен - не должен, но почему-то заплатки ставить приходится. В src\sql\drivers\mysql\qsql_mysql.cpp заменил
Цитировать
QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql))
на
Цитировать
QTextCodec* heuristicCodec = QTextCodec::codecForName("Windows-1251");
Пересобрал, теперь получаю русский текст без toLatin1()...

Меня такой вопрос интересует. В своём предыдущем посте я привёл фрагмент кода. Где там у меня ошибка, приводящая к проблеме с русской кодировкой ?
« Последнее редактирование: Декабрь 18, 2007, 19:20 от Cyrax » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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