Страница 1 из 1

MySQL, Jabberd2 - иероглифы в списке контактов Mirand'ы

Добавлено: 2012-12-20 17:14:41
St@yt
привет всем!...
есть проблема - неправильное отображение списка контактов и групп в Миранде.

имеем

клиент ОС - win xp sp3 рус.
миранда - v0.10.9.0 unicod
миранда - v0.6.3 unicod

сервер

Код: Выделить всё

# uname -a
FreeBSD xxxx 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Tue Dec 11 12:22:29 EET 2012     
#
 pkg_info | grep jabber
jabberd-2.2.16_3    Online presence and instant messaging server

# pkg_info | grep mysql-server
mysql-server-5.1.58 Multithreaded SQL database (server)

Код: Выделить всё

# cat /var/db/mysql/my.cnf
[mysqld]
skip_networking
log = /var/log/mysql.log
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"
skip-character-set-client-handshake

[mysql]
 default-character-set=utf8

[mysqldump]
 default-character-set=utf8

[client]
 default-character-set=utf8

[jabberd]
 default-character-set=utf8

Код: Выделить всё

mysql> use jabberd2
mysql> show variables like "char%";
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)
базу списка пользователей заполняю с помощю скрипта (текстовый файл) - удобно.
скрипт в кодировке:

Код: Выделить всё

file -i myjabber
myjabber: text/x-shellscript; charset=iso-8859-1
но

Код: Выделить всё

# enca -L none myjabber
Unrecognized encoding

при внесении в базу имен и названий групп (русский текст), срипт конвертирует строки, так:

Код: Выделить всё

Name=$(echo $TNAME | iconv -f ISO-8859-1 -t UTF-8)
и уже переконвертированную стороку вносит в нужное поле. например:

Код: Выделить всё

mysql> select charset('group') from `roster-groups` LIMIT 3 ;
+------------------+
| charset('group') |
+------------------+
| utf8             |
| utf8             |
| utf8             |
+------------------+

mysql> select `group` from `roster-groups` LIMIT 3 ;
+--------------------+
| group              |
+--------------------+
| ???????????? ????? |
| ???????????? ????? |
| ???????????? ????? |
+--------------------+
3 rows in set (0.01 sec)

3 rows in set (0.00 sec)

Код: Выделить всё

mysql> select charset('name') from `roster-items` LIMIT 3 ;
+-----------------+
| charset('name') |
+-----------------+
| utf8            |
| utf8            |
| utf8            |
+-----------------+
3 rows in set (0.00 sec)

mysql> select name from `roster-items` LIMIT 3 ;
+-------------------------------+
| name                          |
+-------------------------------+
| ??? ???? ??? (???????)        |
| ????. ????????????? (???????) |
| ?????? ?.?.                   |
+-------------------------------+
3 rows in set (0.00 sec)
это все отображается из putty в кодировке KOI8-R
после заполнения таблиц базы, запускаю миранду, она тянет из баз сервера список групп и контактов. отображается вопросиками также как выше в базах.

перепробовал разные комбинации хранения и конвертации кодировок в базе. каждый раз миранда показывает нечитабельный бред....

кто может подсказать что можно попробовать?..
я думаю что это миранда, локально как-то не в той кодировке записывает инфо полученную из баз MySQL.
пытался в настройках менять шрифты всякие - не помогло.. (может не там менял?) подскажите где...

занимательно то, что это все - работало на старом сервере и с помощью того же скрипта заполнялась база. и миранда все нормально отображала.
предыдущие рабочие версии ПО:
клиент ОС - win xp sp3 рус.
миранда - v0.6.3 unicod

Код: Выделить всё

# uname -a
FreeBSD xxx 6.1-RELEASE FreeBSD 6.1-RELEASE #15: Tue Feb 24 14:52:01 EET 2009
# pkg_info |grep mysql-server
mysql-server-5.0.27 Multithreaded SQL database (server)
# pkg_info | grep jabber
jabberd-2.0.11_2    Online presence and instant messaging server
пробовал устанавливать настройки mysql такие же как и на старом серваке - не помогает...
что то я пропустил.... не пойму что...

если нужна какая нить еще инфа - спрашивайте скину...

заранее спасибо за помощь.

Re: MySQL, Jabberd2 - иероглифы в списке контактов Mirand'ы

Добавлено: 2012-12-20 17:18:20
PYO
Name=$(echo $TNAME | iconv -f ISO-8859-1 -t UTF-8)
Не здесь ошибка?

Re: MySQL, Jabberd2 - иероглифы в списке контактов Mirand'ы

Добавлено: 2012-12-20 17:23:43
St@yt
сам скрипт работает правильно
пробовал разные комбинации например : koi8r -> utf8 и другие.... непомогает.... :(

коннекчусь мирандой к страрому серверу - все в порядке..... возвращаюсь на новый - получаю вопросики...

Re: MySQL, Jabberd2 - иероглифы в списке контактов Mirand'ы

Добавлено: 2012-12-20 17:43:24
PYO
А в какой кодировке исходные данные?

Re: MySQL, Jabberd2 - иероглифы в списке контактов Mirand'ы

Добавлено: 2012-12-20 23:47:28
St@yt
открываю вайл в putty (translation koi8-r) - русский текст отображается нормально...

Код: Выделить всё

#file -i myjabber
myjabber: text/x-shellscript; charset=iso-8859-1
значит ли это что русские буквы в файле в кодировке iso-8859-1 ?.... но учитывая что
шрифты операционки на новом серваке настроена так же как и на старом :

Код: Выделить всё

#cat /etc/rc.conf
font8x8="cp866-8x8"
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
keyrate="fast"
saver="warp"
scrnmap="koi8-r2cp866"
keymap="ru.koi8-r"
думаю в скрипите весь русский текст в koi8-r.

кстати в скрипте на старом серваке перекодировка идет

Код: Выделить всё

Name=$(echo $TNAME | iconv -f KOI8-RU -t UTF-8)
а база хранит текст в latin1 (как по умолчанию)
но я и на новом так же пробовал.... все равно миранда кракозябры показывает.