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/

http://mtaalamu.ru/blog/admining/1516.html

Leave a Comment