forum.bitel.ru http://forum.bitel.ru/ |
|
Кодировка с Базе данных http://forum.bitel.ru/viewtopic.php?f=14&t=12176 |
Страница 1 из 1 |
Автор: | Cobra57 [ 21 дек 2016, 16:03 ] |
Заголовок сообщения: | Кодировка с Базе данных |
Салют! Есть необходимость извлекать данные по Счетам-фактурам прямо из БД которая храниться там в XMLке. Неожиданно столкнулись с проблемой - XML хранятся в разно кодировке, при этом Биллинг нормально все отображает, а настроек никаких таких нет. Возможно это исправить? Например. Беру БД MySQL таблицу bill_invoice_data_14, она в кодировке 1251. Поле XML содержит данные в кодировке UTF-8: Код: <?xml version="1.0" encoding="windows-1251"?><data><bill amounts="600.00" balance_mode="1" bill_number="Б019904" charges="0.00" cid="4243" contract="0815-1027И" contract_date1="24.08.2015" contract_date2="" correction="0" date="30.11.2016" fc="0" mm="11" month="ноябрь" npid="11" payDoc="32120 от 28.07.16 г.; 249327 от 29.06.16 г.; " payDocDate=" " payer="Моисеева Наталья Витальевна (600) подписать договор ответ хран радиодоступ Дубрав" payments="600.00" Беру тоже самое для другого типа СФ этого же модуля: Код: <?xml version="1.0" encoding="UTF-8"?><data><bill saldo="-12.66" saldo_prev="-57.33" amounts="12.66" payments="57.33" charges="0.00" cid="3194" type="11" type_title="РўРўРљ РЎР¤&РђРљРў" contract="DA000287#0714-041T" contract_date1="25.07.2014" contract_date2="" fc="1" balance_mode="0" yy="2016" mm="11" month="РЅРѕСЏР±СЂСЊ" period_date1="01.11.2016" period_date2="30.11.2016" date="30.11.2016" bill_number="DA000287#00703" payer="РћРћРћ «ГОРОДРЩЕ-ХЛЕБ»" total_sum="12.66" npid="12" correction="0"><pos position_id="2" name="Услуги междугородной телефонной СЃРІСЏР·Рё Р·Р° РЅРѕСЏР±СЂСЊ 2016Рі." summ="12.66" sumUnscaled="12.66000" unit="-" unitCode="796" quantity="1" qtynums="0" qtynumsRnd="4" insum="1" awlz="0"></pos><tariff_bill><tariff tpid="88" т.е здесь текст находиться в кодировке 1251, но кривой... перекодируя его в UTF-8 - Получаю нормальный результат. Очень странно это... Версия биллинга: Код: Клиент: вер. 7.0.853 / 10.11.2016 16:29:14
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_51 Сервер: вер. 7.0.1151 / 11.11.2016 20:51:59 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_102 bill: вер. 7.0.107 / 10.11.2016 16:31:13 card: вер. 7.0.40 / 22.08.2016 16:40:03 dba: вер. 7.0.167 / 08.04.2016 17:40:39 dialup: вер. 7.0.319 / 29.08.2016 16:38:40 email: вер. 7.0.180 / 25.05.2016 13:53:19 inet: вер. 7.0.702 / 10.11.2016 16:23:44 ipn: вер. 7.0.260 / 24.10.2016 18:05:11 mps: вер. 7.0.205 / 10.11.2016 16:31:26 npay: вер. 7.0.199 / 05.10.2016 13:38:35 phone: вер. 7.0.280 / 24.10.2016 18:05:25 reports: вер. 7.0.223 / 27.10.2016 17:10:35 robokassa: вер. 7.0.28 / 07.10.2016 16:47:02 rscm: вер. 7.0.183 / 10.11.2016 16:31:29 ru.bitel.bgbilling.plugins.cladr: вер. 7.0.123 / 08.04.2016 17:52:32 ru.bitel.bgbilling.plugins.crm: вер. 7.0.198 / 07.11.2016 18:45:32 ru.bitel.bgbilling.plugins.dispatch: вер. 7.0.89 / 17.10.2016 15:38:03 ru.bitel.bgbilling.plugins.documents: вер. 7.0.175 / 05.10.2016 13:42:40 ru.bitel.bgbilling.plugins.helpdesk: вер. 7.0.193 / 08.11.2016 16:07:52 rurupay: вер. 7.0.37 / 05.10.2016 13:43:21 voiceip: вер. 7.0.189 / 08.04.2016 17:40:15 Окружение: Клиент: os: Windows 7 amd64, 6.1 java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_51 jre home: C:\Program Files\Java\jre1.8.0_51 memory (use/total/max): 53M/121M/228M default tz: 21.12.2016 13:04 MSK +0300 (Europe/Moscow) user tz: 21.12.2016 12:04 EET +0200 (Europe/Kaliningrad) locale: ru_RU Сервер: os: Linux amd64, 3.2.0-4-amd64 java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_102 jre home: /opt/java/jdk1.8.0_102/jre default tz: 21.12.2016 13:01 MSK +0300 (Europe/Moscow) memory (use/total/max): 234M/672M/7282M db time: master: 21.12.2016 13:01 MSK db charset: connection: cp1251(cp1251_general_ci), database: cp1251(cp1251_general_ci) locale: ru_RU uptime: Started: 13.12.2016 08:39:05 Uptime: 8 d 04:22:01 |
Автор: | Cobra57 [ 21 дек 2016, 16:06 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
Упс... простите, уже сам нашел ответ - Посмотрел заголовки XML'ек |
Автор: | dimOn [ 21 дек 2016, 17:24 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
ну вы обновлялись недавно, после лета, видимо, не? сейчас они в utf-8 раньше в 1251 были. реальная кодировка без разницы, в бд это поле блоб и код нормально читает учитывая заголовки xml |
Автор: | zavndw [ 22 дек 2016, 11:11 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
реест счетов в cp1251 выгружается) bill: вер. 7.0.107 / 10.11.2016 16:31:13 |
Автор: | Akhmat [ 31 май 2017, 14:47 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
Привет всем. С модулем билл, давно документы не выставлял, и какая то лажа с кодировкой. база в cp1251, документы формируются в utf-8, в xslt указана кодировка utf-8, но в результате биллинг позиции документа неверно отображает. bill: вер. 6.2.97 / 14.12.2016 14:33:00 |
Автор: | dimOn [ 31 май 2017, 15:04 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
есчо раз: документы хранятся в бинарном блобе и кодирвка БД или таблицы на них никак не влияет. старые документы в 1251 сериализованы, новые в utf-8, соответственно и заголовки xml такие же там, потому корректно обрабатываться должно всё если правильно вычитывать. 1) скриншот конкретного документа покажите 2) и запись в бд соответствующую |
Автор: | ok-2004 [ 31 май 2017, 15:08 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
Цитата: ....база в cp1251....bill: вер. 6.2.97..... Да! это старая багофича... Попробуйте : https://forum.bitel.ru/viewtopic.php?f= ... 397#p96746 и https://forum.bitel.ru/viewtopic.php?f= ... 397#p96769 ЗЫ: и позвольте уж совсем интимный вопрос : в data.properties стоит вот так ?: Код: db.url=jdbc:mysql://x.x.x.x/bgbilling?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_unicode_ci....
|
Автор: | dimOn [ 31 май 2017, 15:15 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
я всё равно настаиваю как и в темах по ссылкам что надо разобраться, не должно ничего биться и от кодировок зависеть. а если есть ошибка - то надо исправить в биллинге, но надо её отловить |
Автор: | dimOn [ 31 май 2017, 15:23 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
покажите: show create table bill_data_ххх select xml from bill_data_ххх where format_number='B-666' где xxx- mid модуля, а B-666 номер вашего документа с кракозябрами |
Автор: | dimOn [ 31 май 2017, 15:34 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
1) а, так стоп, это в счёте/форме? это несколько другая уже проблема может быть. а в клиенте, в GUI, в таблице, этот документ нормально отображается? Ну т.е. там если на счёт кликнуть там таблица с позициями внизу итд - это всё корректно там отображается или так же? 2) а заголовок, т.е. начало этой xml как раз больше интересует, что там написано? <?xml version="1.0" encoding="UTF-8"?> ведь ? |
Автор: | dimOn [ 31 май 2017, 15:35 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
потому что про форму итд - это может быть банально со шрифтами проблема или что-то типа того, это стандартный шаблон у вас? это вообще скрин из клиента "просмотреть документ"? |
Автор: | Akhmat [ 31 май 2017, 15:45 ] | ||
Заголовок сообщения: | Re: Кодировка с Базе данных | ||
Спасибо Димон. нашел проблему, когда с модуля создаешь счета, то все норм с кодировкой. но у меня они глобальным скриптом создаются. там видимо в cp1251 пишутся. в скрипте поправил. все норм
|
Автор: | dimOn [ 31 май 2017, 16:01 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
без разницы в какой кодировке пишутся) главное как в базу добавляете, нельзя добавлять через ps.setString() например, если будете тем более в utf-8 писать там, а база у вас 1251 код покажите скрипта? который сериализует и в базу кладёт, скажу как правильнее |
Автор: | dimOn [ 31 май 2017, 16:04 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
если на скрине последнем - это то что у вас добавил скрипт, то так вижу: что сериализуете вы в utf-8 верно, и заголовок правильный, а потом в базе оно у вас бьётся потому что вы пытаетесь как строку сохранить а вам её в 1251 перекодирует БД-сервер вот на предыдущем скрине из вебовского вашего sql-редактора как раз нормальные кракозябры - там типа utf8 у вас видно, но читается у вас в 1251 потому что он думает что БД у вас ведь в 1251 и так и отображает, там уже косяк просмотрщика (в родном sqlредакторе биллинга так же будет наверное, т.к. там всё же безкодировочные данные) |
Автор: | Akhmat [ 31 май 2017, 16:05 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
было Код: InputStream is = new ByteArrayInputStream( xml.getBytes("windows-1251") ); стало Код: InputStream is = new ByteArrayInputStream( xml.getBytes("utf-8") ); и все норм |
Автор: | dimOn [ 31 май 2017, 16:12 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
Это всё равно неправильно, но такой хак работать будет в принципе. У вас xml это строка явно, вы её откуда берёте? В неё сериализуете или её собираете вручную? Правильно так: вообще ни каком месте не переводить в String между БД и xml-документом в коде. Читать из ResultSet как getBytes и сразу в таком виде и засовывать в xml-парсер (не знаю уж как вы там делаете) И обратное: когда генерируете Document (если вы его создаёте как dom.Document, а не строками собираете) потом сериализуете его в byte[] (ну через ByteArrayOutputStream , например ) а не в String, и так и пишете в БД как setBytes() Тогда проблем не будет 100% ни с новыми ни со старыми документами. |
Автор: | dimOn [ 31 май 2017, 16:18 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
в БД в этом поле нет понятия кодировки, там просто бинарник и в документе dom тоже нет понятия кодировки, там из бинарника оно восстанавливается согласно заголовку с кодировкой а посередине если находится явовский String, то и вылезают все эти проблемы: т.к. всегда при любых преобразованиях String <-> байты подразумевается какая-то "кодировка", а у вас в оба конца такие делаются преобразования вот кои проблемы старательно вычищались вроде как в биллинге, например |
Автор: | Akhmat [ 31 май 2017, 16:24 ] |
Заголовок сообщения: | Re: Кодировка с Базе данных |
этот скрипт древний, помоему на основе кода из вики его создавал. неправильно не страшно, "работает не трожь" |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |