Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Кодировка в Linux при запросе из Postgres


Автор: Romch 15.9.2005, 11:05
Столкунлся со следующей проблемой.
Использую в качестве сервера БД PostgreSQL 8, расположенный под WinXp SP2. В качестве клиента - программа на Си под Линукс.
Использую напрямую функции интерфейса odbc.

Код

 if (setlocale(LC_ALL,"ru_RU.koi8r")==NULL)
    {
    printf("Cannot set locale to koi8r!\n");
    }
......
char city[20];
char station[40];
res=SQLExecDirect(hstmt,(SQLCHAR*)query,SQL_NTS);
SQLBindCol(hstmt,2,SQL_C_CHAR,city,20,&err);
SQLBindCol(hstmt,3,SQL_C_CHAR,station,40,&err);
for(int j=0;j<rows;j++)
{
    fprintf(fp,"%s%s\n",city,station);
}


Приведённый код выводит в файл данные в кодировке UTF8. Несмотря на принудительное установление локали. Тем не менее, данная программа скомпилировання под WinXp корректно выводит в файл в кодировке cp1251.
Подозреваю, что это особенность odbc-драйвера для постгрес под линукс. Или в чём проблема? И как её решать?

Автор: Kurt 16.9.2005, 22:44
Хм..
Я слабо разбираюсь в Си, но хотел бы спросить:
setlocale(LC_ALL,"ru_RU.koi8r") - устанавливает кодировку для чего? Для Си-программы? А PostgreSQL-сервер ей выдает данные в UTF?
Возможно, стоит переконвертирвать эти данные в нужную локаль? Я не знаю, как с ODBC, но посмотри http://www.postgresql.org/docs/8.0/interactive/multibyte.html секцию Automatic Character Set Conversion Between Server and Client
Надеюсь, поможет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)