Openfire, Vcard и UTF-8
Сегодня после перестановки сервера Openfire столкнулись с проблемой с кодировкой.
В Jabber протоколе есть такая замечательная штука, как Vcard.
vCard — формат файлов для обмена электронными визитными карточками. vCard-файл состоит из vCard-записей, каждая из которых содержит информацию одной визитной карточки. vCard-запись может содержать имя, адрес, номера телефонов, URL, логотип, видео и аудио фрагменты.
Формат vCard или Versitcard, как его называют англоговорящие пользователи, разработан в 1995 консорциумом Versit, в который вошли Apple Computer, AT&T (позднее Lucent), IBM и Siemens. В декабре 1996 все права на формат перешли к Internet Mail Consortium.
Версия 2.1 получила поддержку в большинстве почтовых клиентов. Версия 3.0 описана в RFC 2425 и RFC 2426. Обычно файл vCard имеет расширение .vcf.
Проблема
Openfire поддерживает Vcard для своих пользователей, которые хранятся в таблице ofVCard. В ней в поле vcard хранится xml-представление карточки пользователя. Эти визитки автоматически появляются в нашем IM-клиенте. При обновлении пользовательского профиля карточки обновляются автоматически. Суть проблемы в том, что имена, фамилии и другие данные пользователей могу быть написаны по-русски. При обновлении профилей вместо русских символов появлялись знаки вопроса.
Решение
В сети в основном советуют один вариант решения. В конфиге Openfireизменить строку коннекта:
jdbc:mysql://[your_host]/[database_name]?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
Но после этого Openfire работать перестал. Он вместо admin-панели отображал мастер установки, и после завершения снова его показывал.
Вот метод, который помог решить проблему с кодировкой UTF-8 в Openfire:
1. базу данных для Openfire необходимо создать с указанием кодировок
CREATE DATABASE openfire
CHARACTER SET utf8 COLLATE utf8_general_ci;
Или поменять кодировку текущей:
use наша-база;
alter database character set utf8;
alter database collate utf8_general_ci;
2. в настройка openfire.xml в описании подключения к mysql необходимо добавить строки:
<database>
<defaultProvider>
<driver>com.mysql.jdbc.Driver</driver>
……………..
……………..
<mysql>
<useUnicode>true</useUnicode>
</mysql>
</defaultProvider>
</database>
3. oбязательно указать в настройках сервера MySQL в секциях и [mysqld]:
default-character-set = utf8
Ссылки
http://blogs.sysfaq.ru/kukulkan/2009/07/01/openfire-encoding-offline-messages-rosters-in-utf8/