Openfire: сообщения в кодировке UTF-8 в автономном режиме сохраняются неправильно


Мы используем Openfire 3.9.3. Его база данных MySql использует сортировку utf8_persian_ci, а в openfire.xml мы имеем:

...<defaultProvider> 
  <driver>com.mysql.jdbc.Driver</driver>  
  <serverURL>jdbc:mysql://localhost:3306/openfire?useUnicode=true&amp;amp;characterEncoding=UTF-8</serverURL>  
  <mysql> 
    <useUnicode>true</useUnicode> 
  </mysql> ....

Проблема в том, что автономные сообщения, содержащие персидские символы (в кодировке UTF-8), сохраняются в виде строк с вопросительными знаками. Например, سلام (в переводе с персидского означает "привет") сохраняется и отображается как "????".

1 ответ

Решение

MySQL не имеет надлежащей поддержки Unicode, что затрудняет поддержку данных на не западных языках. Тем не менее, драйвер JDBC MySQL имеет обходной путь, который можно включить, добавив

?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

на URL-адрес драйвера JDBC. Вы можете отредактировать файл conf/openfire.xml, чтобы добавить это значение.

Примечание. Если механизм, который вы используете для настройки URL-адреса JDBC, основан на XML, вам потребуется использовать литерал символа XML & для разделения параметров конфигурации, поскольку амперсанд является зарезервированным символом для XML.

Также убедитесь, что ваша БД и таблицы имеют кодировку utf8.

Другие вопросы по тегам