Почти полностью решил проблемы с кодировками.
Сервер ставился под Debian с UTF-8 локалью.
В конфигурации mySQL прописать:
[mysql]
default-character-set = utf8[mysqld]
default-character-set = utf8
character_set_server = utf8
collation_server = utf8
skip-character-set-client-handshake
Далее, необходимо для таблицы files принудительно прописать в sql скрипте создания базы кодировку latin1 (иначе будет ругаться на длину ключа myISAM).
Так же необходимо перекодировать в UTF-8 файл с переводом интерфейса, и прописать кодировку.
В "морде" OCS правим файлы:
В prefrences.php
define("UTF8_DEGREE", 0 );
В machine.php в стр. 134 вместо TextDecode ипользовать utf8_decode
Для корректного отображения ПО использовать функцию htmlentities(<Переменная>,ENT_COMPAT,UTF) (в функции print_softwares() файла machine.php).
Для корректной работы GLPI в "морде" GLPI правим:
/inc/ocsng.class.php в строке 50 видим $this->dbenc="latin1"; меняем $this->dbenc="utf-8";
Теперь надо "привить" UTF-8 к агенту. Собираем под MS VC++ 6.0 (см. пост AloneFox).
WIN32_AGENT\include\_common\defines.h(47)
#define XML_HEADERS _T( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!DOCTYPE REQUEST>\r\n")
/win32_agent/include /_common\utils.h
Правим функцию cleanXml:
static void cleanXml( CMarkup* pX ) {
setlocale(LC_ALL,"");
CString bef = pX->AToUTF8(pX->GetDoc());
pX->SetDoc(bef);
}
Необходимо при этом обновить библиотеку mark-up до Release 9.0 и прописать туда две функции из "старой" библиотеки, которые туда поместили разработчики OCS.
Детально процесс сборки описывать не буду.
Далее собираем с помощью NSIS OCSLogon,OCSAgentSetup,OCSAgent.
Все.