Russian Qt Forum

Qt => Базы данных => Тема начата: AlexEx от Март 04, 2021, 18:04



Название: Кодировка сообщений об ошибках в PostgreSQL
Отправлено: AlexEx от Март 04, 2021, 18:04
Вопрос не совсем Qt-шный, но, может, кто подскажет. Есть примитивная тестовая программа, работающая с сервером PostgreSQL через библиотеку libpqxx. Ошибки pqxx::connection прилетают в кодировке Windows-1251, ошибки pqxx::work – UTF-8. Хотелось бы иметь все ошибки в единой кодировке или хотя бы понять, когда какую использовать для вывода  пользователю. В файле postgresql.conf есть нужная настройка lc_messages =…, меняющая, по идее, язык и кодировку. Вот только кодировку pqxx::connection для русского языка сменить не удается, т.е. lc_messages = 'Russian_Russia.1251' – русский язык, кодировка Win 1251, lc_messages = 'en_us.utf-8' – английский язык, lc_messages = ''Russian_Russia.utf-8' – все та же Win 1251.


Название: Re: Кодировка сообщений об ошибках в PostgreSQL
Отправлено: Hellraiser от Март 04, 2021, 18:48
Это общая проблема организации подключения к PostgreSQL, в том числе и в Qt. До момента подключения драйвер не знает кодировки сервера, которую можно узнать только после подключения, и считает что используется кодировка Win-1251 (в Qt используется QString::fromLocal8Bit). Если сам сервер настроен на UTF-8 и использует язык, отличный от en, то будут крякозябры.


Название: Re: Кодировка сообщений об ошибках в PostgreSQL
Отправлено: AlexEx от Март 04, 2021, 19:28
Тогда не совсем понятно, если lc_messages = 'Russian_Russia.1251', то почему ошибки pqxx::work в UTF-8. В кодировке БД? Она, действительно, UTF-8. Язык в зависимости от lc_messages меняется, а кодировка - нет. Что зависит от кодировки, указанной в lc_messages?