PDA

Показать полную графическую версию : Странная проблема с кодировкой(похоже проблема с преобразованием кодировок)


Mertvii
11-07-2008, 19:44
Имеется локальный jabber-сервер Openfire. Сам сервер установлен на машине с windows XP sp2, версия сервера последняя, для хранения настроек используется внешняя база данных(а именно mysql в составе xampp пакета), в качестве клиентов используется Soapbox 2.6. Имеется известная в сети проблема с русскими текстами в профилях пользователей и проблема с сообщениями, посланными в офлайне(всё это хранится в виде записей в той самой базе). Рекомендуемое на нескольких сайтах решение я испробовал - база jabber создана с utf8 unicode ci как дефолтовой кодировкой. Проблема никуда не делась - по прежнему всё, что набранно русскими буквами после попадания в базу извлекается оттуда в виде '?'. Т.е., если оба клиента онлайн, т.е. мессага идёт от 1го -> через сервер -> ко 2му - всё путём. Если один в оффлайне, и мессага идёт от 1го -> на сервер -> в mysql базу -> 2му(когда залогинится) - весь русский текст заменятся '?'. С английским всё путём; если профиль пользователя(ФИО, должность, адрес) набрать русскими буквами - обратно из базы извлекаем пачку '?', если английскими - всё норм. В phpMyadmin(графический интерфейс для mysql через веббраузер, работает на основе апачча, всё идёт одним комплектом - тем самым xampp) нашёл таблицу, где сохраняються отосланные в оффлайне мессаги, выглядит это примерно так (содержимое поля, куда записывается тело сообщения):

<message type="chat" xml:lang="ru" id="sd20" to="asamusev@jabber.ukonprom.loc" from="dsakovich@jabber.ukonprom.loc/SoapBox"><body>???????</body><html xmlns="http://jabber.org/protocol/xhtml-im"><body xmlns="http://www.w3.org/1999/xhtml"><span style="font-weight: normal; font-size: 9pt; color: #004200; font-style: normal; font-family: arial">???????</span></body></html><x xmlns="jisp:x:jep-0038"><name>shinyicons</name></x><active xmlns="http://jabber.org/protocol/chatstates"/></message>

Я выдели чёрным ряд вопросительных знаков - скорее всего это и есть сам текст сообщения - после нескольких опытов стало очевидно, что порядок появления записей в этой таблице и количество знаков '?' (а также название и содержимое остальных полей) соответствуют отсылаемым мессагам. При этом если мешать русские символы с латиницей - на '?' заменяется только русские, латиница отображается корректно и в клиенте по подключению, и в той таблице базы. Т.е., если я правильно понимаю, запись уже в саму базу попадает "испорченной"? При этом поле, где храниться запись, имеет кодировку utf8 unicode ci, как и рекомендовано! Как я понимаю, клиенты(Soapbox) используют не ut8-кодировку, быть может стандартную windows 1251, т.е. сервер, прежде чем сохранить их в базе, должен преобразовать это в уникод. Может быть ошибка происходит на этапе этого преобразования? Или при записи в базу данных, если преобразование происходит именно там?

Mertvii
13-07-2008, 16:05
up!




© OSzone.net 2001-2012