forum.bitel.ru http://forum.bitel.ru/ |
|
Кодировка аля ??? http://forum.bitel.ru/viewtopic.php?f=19&t=11397 |
Страница 1 из 1 |
Автор: | rustavel [ 01 мар 2016, 11:22 ] | |||
Заголовок сообщения: | Кодировка аля ??? | |||
проблема такова: после обновления(крайнего на 01.03.2016) появились проблемы с кодировкой данных получаемых по http вот примеры запросов URL, а в прицепе скрины ответов озвращает вопросы SQL SELECT invoice.format_number AS 'НомерДок', DATE_FORMAT(invoice.create_dt,'%Y%m%d%H%m%s') AS 'ДатаДок', invoice.id AS 'ИДДокумента', contract.title AS 'НомерДоговора', invoice.summ AS 'Сумма' ,invoice.xml, Vid.Title AS 'ВидДокумента' FROM bill_invoice_data_5 AS invoice INNER JOIN contract ON (invoice.cid=contract.id) AND (contract.fc=1) INNER JOIN bill_doc_type_5 AS Vid ON Vid.id=invoice.type WHERE invoice.create_dt>='2016.01.31' AND invoice.create_dt<='2016.01.31' URL http://10.78.2.1:8080/bgbilling/executer? user=user&pswd=pass&module=sqleditor&action=SQLEditor&pageSize=100000&sql=%0A%20SELECT%20%20invoice.format_number%20AS%20%27%D0%9D%D0%BE%D0%BC%D0%B5%D1%80%D0%94%D0%BE%D0%BA%27%2C%20DATE_FORMAT%28invoice.create_dt%2C%27%25Y%25m%25d%25H%25m%25s%27%29%20AS%20%27%D0%94%D0%B0%D1%82%D0%B0%D0%94%D0%BE%D0%BA%27%2C%0A%20%09%09%20%20invoice.id%20AS%20%27%D0%98%D0%94%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%27%2C%20contract.title%20AS%20%27%D0%9D%D0%BE%D0%BC%D0%B5%D1%80%D0%94%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0%27%2C%20invoice.summ%20AS%20%27%D0%A1%D1%83%D0%BC%D0%BC%D0%B0%27%20%2Cinvoice.xml%2C%0A%09%09%20%20Vid.Title%20AS%20%27%D0%92%D0%B8%D0%B4%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%27%0A%20FROM%20%20bill_invoice_data_5%20AS%20invoice%20%0A%20INNER%20JOIN%20contract%20ON%20%28invoice.cid%3Dcontract.id%29%20AND%20%28contract.fc%3D1%29%0A%20INNER%20JOIN%20bill_doc_type_5%20AS%20Vid%20ON%20Vid.id%3Dinvoice.type%0A%20WHERE%20invoice.create_dt%3E%3D%272016.01.31%27%20%0A%09AND%20invoice.create_dt%3C%3D%272016.01.31%27 это норм SQL SELECT id, name, title FROM module WHERE name='bill'ORDER BY id URL http://10.78.2.1:8080/bgbilling/execute ... %20BY%20id помогите кто чем могёт)
|
Автор: | dimOn [ 01 мар 2016, 11:43 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
версии где? ну у вас там SQLEditor во-первых, во-вторых там проблемы только в колонке xml в которой по определению бинарные данные. что именно вы хотите там видеть? у вас что, до обновления там как-то по другому рисовалось? |
Автор: | rustavel [ 01 мар 2016, 11:54 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
версии пока не могу получить вообще я получаю эти данные через 1с, а здесь для наглядности так выложил там не бинарные данные, а текстовые рускоязычные до обновления было всё корректно можно даже увидеть на скринах, что это строковое значение со знаками пунктуации |
Автор: | skn [ 01 мар 2016, 11:58 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
посмотрите Код: show create table bill_invoice_data_5;
|
Автор: | dimOn [ 01 мар 2016, 11:58 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
а я вам говорю, что в колонке "xml" в этой таблице бинарные данные, там xml-ка в байтовом виде хранится, причём тут ясно видно что внутри у вас xml в 1251 почему-то. именно потому оно будет в виде недоюникода рисоваться, т.к. вывод в utf-8 приходит. но 1251 быть кагбэ не должно, потому я спросил - какая версия. без этого смысла нет разбираться, и как следствие вопрос: что это было за "обновление" - откуда и куда. |
Автор: | babay951 [ 01 мар 2016, 13:33 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
На 5.2 было Код: <?xml version="1.0" encoding="windows-1251"?><data><bill cid="363" type="3" contract="22583" contract_date1="01.11.2010" contract_date2="" fc="1" firmId="0" balance_mode="1" yy="2010" mm="11" month="ноябрь" period_date1="01.11.2010" period_date2="30.11.2010" date="02.12.2010" bill_number="00014" payer="Товарищество Собственников Жилья " total_sum="600.00" npid="2"><pos position_id="1" name="Доступ в интернет 11-2010 г." summ="600.00" unit="шт." quantity="1" qtynums="0" insum="1" awlz="0"></pos><tariff_bill><personal_tariff id="12" tree_id="40" title="микс 128 за 600р" date1="01.11.2010" date2=""></personal_tariff></tariff_bill><contract_data cid="363"><contract cid="363" title="22583" comment="Товарищество Собственнико ... На 6.2 стало Код: <?xml version="1.0" encoding="UTF-8"?><data><bill saldo="-1000.00" saldo_prev="-1000.00" amounts="1000.00" payments="1000.00" charges="0.00" cid="10291" type="3" type_title="Счёт-фактура" contract="33798" contract_date1="23.10.2013" contract_date2="" fc="1" balance_mode="1" yy="2016" mm="1" month="январь" period_date1="01.01.2016" period_date2="31.01.2016" date="31.01.2016" bill_number="89029" payer="РћРћРћ "РљРРЎ"" total_sum="1000.00" npid="2" correction="0"><pos position_id="1" name="Доступ РІ интернет Р·Р° январь" ... Это в одной и той же таблице, на одном коннекте . Кодировка коннекта c mysql cp1251. Вопрос - откуда эта таблица берет информацию о кодировке? <?xml version="1.0" encoding="UTF-8"?> Что то не видать нигде настроек... Подскажите пожалуйста? |
Автор: | dimOn [ 01 мар 2016, 14:04 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
Нет никаких настроек, в 6.2 просто xml сериализуется в utf-8 (когда-то давно сериализовалось в 1251) и сохраняется в виде байтов в блоб в поле таблицы. Кодировка таблицы, коннекта, бд итд итп здесь совершенно ни при чём. Ещё раз - xml хранится в блобе в виде последовательности байтов. |
Автор: | rustavel [ 01 мар 2016, 14:21 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
извиняюсь .. и чего делать то?) |
Автор: | babay951 [ 01 мар 2016, 14:58 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
А зачем она пишет туда в utf-8, если таблица (да и кажется вся база) в cp1251? Какая в этом вообще тогда логика? |
Автор: | dimOn [ 01 мар 2016, 15:00 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
Цитата: извиняюсь .. и чего делать то?) Ну это смотря что вы хотите получить в итоге. Если строку - читать как байты и трактовать эти байты как строку в заранее известной кодировке (utf-8). Есть разобранный dom-объект, то во всех api всех языков есть возможность читать вход как байтовую последовательность. Это ровно то же самое, что вы просто из файла с диска читаете, в файле тоже никаких кодировок нет же, набор байтов. У вас смысл через http-запрос это сделать обязательно? |
Автор: | dimOn [ 01 мар 2016, 15:09 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
babay951 писал(а): А зачем она пишет туда в utf-8, если таблица (да и кажется вся база) в cp1251? Какая в этом вообще тогда логика? Вопрос непонятен. Он пишет туда набор байтов. У набора байтов нет кодировки по определению. У блоба, в котором xml хранится тоже нет кодировки по определению. Потому кодировка таблицы, бд, сервера тут ни при чём. Идём далее: набор байтов получается, когда xml-документ сериализуется в них. Для этого используется какая-либо "кодировка", очевидно, т.к. кодировка - это алгоритм представления символьных последовательностей в виде байтовых (она же, кодировка, кстати, указывается в самом теле xml и является его атрибутом). Должна использоваться какая-либо кодировка. Используется utf-8. Почему нужно использовать 1251? Сейчас не 1998й год же. |
Автор: | dimOn [ 01 мар 2016, 15:11 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
Почему там именно в блобе хранится - вопрос отдельный и выходит за рамки обсуждения. Для простоты и краткости нужно считать, что по историческим причинам. |
Автор: | dimOn [ 01 мар 2016, 15:14 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
С практической точки зрения по поводу вопроса "что делать" в случае если именно нужно использовать а) http-запрос б) module=sqleditor&action=SQLEditor тут нужно играть с запросом, а именно глядеть в сторону: Код: SELECT .... CAST(invoice.xml AS CHAR(666666) CHARACTER SET utf8) as xml ...
|
Автор: | ok-2004 [ 01 мар 2016, 21:13 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
В модуле бухгалтерии с xml-ками созданными в cp-1251 в 5.2 на 6.2 надо поступать так : Код: UPDATE bill_data_5 SET xml = REPLACE(xml, 'windows-1251', 'utf-8');
ALTER table bill_data_5 CHANGE xml xml mediumtext CHARACTER SET cp1251; ALTER TABLE bill_data_5 MODIFY xml mediumtext CHARACTER SET utf8; ALTER table bill_data_5 CHANGE xml xml mediumblob; |
Автор: | dimOn [ 01 мар 2016, 21:43 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
а зачем? в биллинге обрабатывается корректно и старые и новые xml-ки, созданные в любых версиях, т.е. там вообще кодировка не учитывается (т.к. и не должна). |
Автор: | dimOn [ 01 мар 2016, 21:45 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
и да, если уже есть и такие и такие xml (в общем-то переход случился где-то посередине 6.2), то вы такими действиями их как раз попортите, нет? |
Автор: | rustavel [ 02 мар 2016, 07:37 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
dimOn писал(а): С практической точки зрения по поводу вопроса "что делать" в случае если именно нужно использовать а) http-запрос б) module=sqleditor&action=SQLEditor тут нужно играть с запросом, а именно глядеть в сторону: Код: SELECT .... CAST(invoice.xml AS CHAR(666666) CHARACTER SET utf8) as xml ... с cp1251 вместо utf8 заработало спасибо |
Автор: | dimOn [ 02 мар 2016, 13:50 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
а ну да, 1251 логично. у вас то 1251 же, я уже запутался вы тут вдвоём писали но вопрос остаётся открытым - почему 1251 то? какая версия? если у вас настолько дремучая версия, что туда в 1251 биллинг пишет, то что могло сломаться 1го марта то? |
Автор: | rustavel [ 02 мар 2016, 14:00 ] |
Заголовок сообщения: | Re: Кодировка аля ??? |
dimOn писал(а): а ну да, 1251 логично. у вас то 1251 же, я уже запутался вы тут вдвоём писали но вопрос остаётся открытым - почему 1251 то? какая версия? если у вас настолько дремучая версия, что туда в 1251 биллинг пишет, то что могло сломаться 1го марта то? я занимаюсь только 1с и доступа в недры не имею как было сказано "сломалось после обновления" больше информации у меня нет.. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |