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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: PostgreSQL и кодировка сообщений  (Прочитано 4014 раз)
Naihil
Новичок

Offline Offline

Сообщений: 23


Просмотр профиля
« : Июнь 08, 2016, 12:44 »

Добрый день!

Помогите разобраться в след. вопросе. Есть виртуалка дебиан 8 с постгресом 9.4, энкодинг кластера утф-8, энкодинг базы тоже утф-8, lc_messages = 'ru_RU.UTF-8'
При успешном подключении к базе из приложения текст и сообщения постгреса нормально читаются, проблем нет.
Если попытаться подключиться с неправильными логин/пароль, то выдаётся ошибка
Код:
"Р’РђР–РќРћ:  пользователь \"test1\" РЅРµ прошёл проверку подлинности (РїРѕ паролю)\nQPSQL: Unable to connect"
Собственно, вопрос: почему кракозябры, вместо читаемого сообщения на русском?

Начал копать. В исходниках драйвера, в функции static QSqlError qMakeError(...):
Код:
QString msg = p->isUtf8 ? QString::fromUtf8(s) : QString::fromLocal8Bit(s);

p->isUtf8 инициализируется false и значение устанавливается только после подключения к серверу, вызовом запроса exec("SET CLIENT_ENCODING TO 'UNICODE'").
Т. е., приложение считает, что до успешного подключения все сообщения от сервера приходят в локальной кодировке, на windows это CP1251, отсюда и кракозябры.

Помогла установка
Код:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Вроде всё работает, все сообщения на русском, текст из базы тоже нормально достаётся, но может есть какие-то подводные камни в таком способе?
Как вариант ещё можно завести тикет, чтоб по умолчанию p->isUtf8 инициализировался в true, вряд ли кто-то в 21 веке будет создавать постгресовскую базу не в юникоде :-/
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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