BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 мар 2024, 20:50

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
 Заголовок сообщения: Кодировка с Базе данных
СообщениеДобавлено: 21 дек 2016, 16:03 
Не в сети

Зарегистрирован: 10 апр 2013, 13:29
Сообщения: 36
Карма: 1
Салют!
Есть необходимость извлекать данные по Счетам-фактурам прямо из БД которая храниться там в 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="ТТК СФ&amp;АКТ" 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 21 дек 2016, 16:06 
Не в сети

Зарегистрирован: 10 апр 2013, 13:29
Сообщения: 36
Карма: 1
Упс... простите, уже сам нашел ответ :) - Посмотрел заголовки XML'ек


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 21 дек 2016, 17:24 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
ну вы обновлялись недавно, после лета, видимо, не? сейчас они в utf-8 раньше в 1251 были. реальная кодировка без разницы, в бд это поле блоб и код нормально читает учитывая заголовки xml

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 22 дек 2016, 11:11 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 27 мар 2012, 11:59
Сообщения: 2676
Карма: 72
реест счетов в cp1251 выгружается)
bill: вер. 7.0.107 / 10.11.2016 16:31:13


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 14:47 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
Привет всем.
С модулем билл, давно документы не выставлял, и какая то лажа с кодировкой. база в cp1251, документы формируются в utf-8, в xslt указана кодировка utf-8, но в результате биллинг позиции документа неверно отображает. bill: вер. 6.2.97 / 14.12.2016 14:33:00

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:04 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
есчо раз: документы хранятся в бинарном блобе и кодирвка БД или таблицы на них никак не влияет. старые документы в 1251 сериализованы, новые в utf-8, соответственно и заголовки xml такие же там, потому корректно обрабатываться должно всё если правильно вычитывать.
1) скриншот конкретного документа покажите
2) и запись в бд соответствующую

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:08 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
Цитата:
....база в 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....

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
я всё равно настаиваю как и в темах по ссылкам что надо разобраться, не должно ничего биться и от кодировок зависеть. а если есть ошибка - то надо исправить в биллинге, но надо её отловить

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:23 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
покажите:

show create table bill_data_ххх

select xml from bill_data_ххх where format_number='B-666'

где xxx- mid модуля, а B-666 номер вашего документа с кракозябрами

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:26 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
в data.properties cp1251
скрины


Вложения:
2017-05-31_12-24-29.png
2017-05-31_12-24-29.png [ 20.84 КБ | Просмотров: 10352 ]
2017-05-31_12-23-16.png
2017-05-31_12-23-16.png [ 18.47 КБ | Просмотров: 10352 ]

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:34 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
1) а, так стоп, это в счёте/форме? это несколько другая уже проблема может быть.
а в клиенте, в GUI, в таблице, этот документ нормально отображается? Ну т.е. там если на счёт кликнуть там таблица с позициями внизу итд - это всё корректно там отображается или так же?

2) а заголовок, т.е. начало этой xml как раз больше интересует, что там написано? <?xml version="1.0" encoding="UTF-8"?> ведь ?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:35 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
потому что про форму итд - это может быть банально со шрифтами проблема или что-то типа того, это стандартный шаблон у вас?
это вообще скрин из клиента "просмотреть документ"?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 15:45 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
Спасибо Димон.
нашел проблему, когда с модуля создаешь счета, то все норм с кодировкой. но у меня они глобальным скриптом создаются.
там видимо в cp1251 пишутся.

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


Вложения:
2017-05-31_12-39-15.png
2017-05-31_12-39-15.png [ 22.32 КБ | Просмотров: 10350 ]

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:01 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
без разницы в какой кодировке пишутся) главное как в базу добавляете, нельзя добавлять через ps.setString() например, если будете тем более в utf-8 писать там, а база у вас 1251
код покажите скрипта? который сериализует и в базу кладёт, скажу как правильнее

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:04 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
если на скрине последнем - это то что у вас добавил скрипт, то так вижу: что сериализуете вы в utf-8 верно, и заголовок правильный, а потом в базе оно у вас бьётся потому что вы пытаетесь как строку сохранить а вам её в 1251 перекодирует БД-сервер

вот на предыдущем скрине из вебовского вашего sql-редактора как раз нормальные кракозябры - там типа utf8 у вас видно, но читается у вас в 1251 потому что он думает что БД у вас ведь в 1251 и так и отображает, там уже косяк просмотрщика (в родном sqlредакторе биллинга так же будет наверное, т.к. там всё же безкодировочные данные)

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:05 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
было
Код:
      InputStream is = new ByteArrayInputStream( xml.getBytes("windows-1251") );

стало
Код:
      InputStream is = new ByteArrayInputStream( xml.getBytes("utf-8") );

и все норм

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:12 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Это всё равно неправильно, но такой хак работать будет в принципе.

У вас xml это строка явно, вы её откуда берёте? В неё сериализуете или её собираете вручную?

Правильно так: вообще ни каком месте не переводить в String между БД и xml-документом в коде.
Читать из ResultSet как getBytes и сразу в таком виде и засовывать в xml-парсер (не знаю уж как вы там делаете)
И обратное: когда генерируете Document (если вы его создаёте как dom.Document, а не строками собираете) потом сериализуете его в byte[] (ну через ByteArrayOutputStream , например ) а не в String, и так и пишете в БД как setBytes()
Тогда проблем не будет 100% ни с новыми ни со старыми документами.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:18 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
в БД в этом поле нет понятия кодировки, там просто бинарник
и в документе dom тоже нет понятия кодировки, там из бинарника оно восстанавливается согласно заголовку с кодировкой
а посередине если находится явовский String, то и вылезают все эти проблемы: т.к. всегда при любых преобразованиях String <-> байты подразумевается какая-то "кодировка", а у вас в оба конца такие делаются преобразования
вот кои проблемы старательно вычищались вроде как в биллинге, например

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кодировка с Базе данных
СообщениеДобавлено: 31 май 2017, 16:24 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
этот скрипт древний, помоему на основе кода из вики его создавал.
неправильно не страшно, "работает не трожь" :)

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.117s | 60 Queries | GZIP : On ]