Текущее время: Пт, авг 01 2025, 12:59

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Кодировка и XML
СообщениеДобавлено: Вт, мар 25 2008, 15:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Либо я что-то не так набирал, либо ещё что, но не нашел поиском ответа на свой вопрос.
Проблема такая: при создании документа XML через if_ixml, кодировка по умолчанию - utf-8, в итоговом файле нужна кодировка cp-1251.

После рендеринга формируется бинарная табличка с текстом.
При её выгрузке преобразования кодировок бессмысленны, т.к. бинарник.

Предпринял попытку изменить кодировку документа, хотя чувствовал, что делаю не то что нужно.
Цитата:
l_encoding = l_ixml->create_encoding(
byte_order = '0' character_set = 'windows-1251' ).
l_document->set_encoding( encoding = l_encoding ).

В результате получил ахинею.

Отсюда вопрос, а как преобразовать сформированный документ в нужную кодировку?

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 25 2008, 16:39 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2005, 15:44
Сообщения: 127
Если все правильно помню.... то преобразование в нужную кодировку происходит :
Code:
    l_streamfactory = l_ixml->create_stream_factory( ).
    l_ostream = l_streamfactory->CREATE_OSTREAM_CSTRING( STR ).
    l_encoding = l_ixml->create_encoding( byte_order = '0' character_set = 'windows-1251' ).
    l_ostream->SET_ENCODING( l_encoding ).
*   Rendering the document
    l_renderer = l_ixml->create_renderer( ostream  = l_ostream
                                          document = l_document ).
    l_rc = l_renderer->render( ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 26 2008, 07:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Увы, предложенный, Nikolas способ не сработал.

Но проблема решилась.
Следуя мануалу, изначально, таблица в которую рендерится была объявлена как
Цитата:
Types: Begin of xml_line,
data(256) type x,
end of xml_line.

т.е. байтовых строк. Преобразовав её в
Цитата:
Types: Begin of xml_line,
data(256) type c,
end of xml_line.

получил текстовую, которая замечательно выгружается в нужной кодировке.
Всё, пока не обнаружил косяков.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 08:53 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
метод set_encoding - работает, выяснилось после переноса в тестовую систему. (А вот решение которое было на разработке - наоборот не работает в тесте :) ). Буду интересоваться у админа - в чем причина...

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 09:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
PK написал:
Буду интересоваться у админа - в чем причина...

Я бы не стал терроризировать базисников. Вряд ли они могут это сломать/починить. Лучше минимальный примерчик с ошибкой покажите целиком. А проверьте ещё раз: наверняка что-нибудь напутали.

А вообще Nikolas правильно советует, что нужно использовать renderer, а сам документ пусть будет в системной кодировке.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 12:58 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
sibrin написал:
Я бы не стал терроризировать базисников. Вряд ли они могут это сломать/починить. Лучше минимальный примерчик с ошибкой покажите целиком. А проверьте ещё раз: наверняка что-нибудь напутали.

А вообще Nikolas правильно советует, что нужно использовать renderer, а сам документ пусть будет в системной кодировке.


Изначально я создал через рендерер табличку байтовых строк, которые при выгрузке через gui_download и filetype 'BIN' давали нормальный файл, но юникод.

Спросил совета у масс, т.к. самостоятельные эксприменты с set_encoding не дали результатов(а на разработке они их не дали и в последствии). Nikolas сказал про этот метод на renderer'e, а не на документе (как до этого пробовал я).
Результатом - все равно кракозябры.

Изменил целевую табличку для renderer'a как это было постом выше и стал выгружать как текстовый файл в codepage '1504'.
Финт ушами конечно, но работал (на разработке).

При переносе на тест результатом стали те же "кракозябры".

Изменил назад, с учетом что set_encoding производится на объекте renderer, а не документе. В итоге на разработке - выходят "кр-бры", а на тесте, после переноса, нормальный cp-1251.

Программы - идентичны, настройки gui - так же, результат действия - различен. Как таковой ошибки не нашел :)

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 13:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
PK написал:
Изменил назад

По поводу различия разработки и теста. Может быть какая-нибудь глупость. Например, после переноса через транспорт программа может активироваться не сразу и вы запускали предыдущую версию. Или что-нибудь в этом духе.

Вы сами себя запутали с кодировками, по-моему. В xml документе кодировку ставить не надо (только в renderer), а GUI_DOWNLOAD нужно вызывать с форматом 'BIN'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
sibrin написал:
По поводу различия разработки и теста. Может быть какая-нибудь глупость.[skipped] Или что-нибудь в этом духе.

Этот вариант исключен.

sibrin написал:
Вы сами себя запутали с кодировками, по-моему. В xml документе кодировку ставить не надо (только в renderer), а GUI_DOWNLOAD нужно вызывать с форматом 'BIN'.

set_encoding на разрабокте не отрабатывал и не отрабатывает как надо до сих пор. На тесте - работает, вот собственно код того, что имею в итоге.

Code:
  l_ixml = cl_ixml=>create( ).

  l_document = l_ixml->create_document( ).

  l_encoding = l_ixml->create_encoding(
    byte_order = '0' character_set =  'windows-1251' ).

  perform fill_xml_doc.

  l_streamfactory = l_ixml->create_stream_factory( ).

  l_ostream =
  l_streamfactory->create_ostream_itable(
  table = l_xml_table ).

  l_ostream->SET_ENCODING( encoding = l_encoding ).

  l_ostream->set_pretty_print( pretty_print = '1' ).

  l_renderer = l_ixml->create_renderer(
    ostream = l_ostream  document = l_document ).
  l_rc = l_renderer->render( ).

  l_xml_size = l_ostream->get_num_written_raw( ).

  call method cl_gui_frontend_services=>gui_download
    exporting
      filename     = filename
      bin_filesize  = l_xml_size
      filetype      = 'BIN'
    changing
      data_tab     = l_xml_table
    exceptions
      others       = 13.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
А можно посмотреть, как выглядят "кракозябы" в разработке?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:11 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
sibrin написал:
GUI_DOWNLOAD нужно вызывать с форматом 'BIN'.

Есть класс CL_XML_DOCUMENT - можно там посмотреть, как выгружается/звгружается XML в файл.

Там как раз формат 'BIN' стоит.

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Для успокоения совести, ещё бы неплохо проверить, совпадает ли содержимое l_xml_table перед вызовом gui_download с тем, что попадает в файл.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:28 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
На разработке (так выглядит при кодировке win)
Цитата:
<?xml version="1.0" encoding="windows-1251"?>
<ДРЩЫ xsi:noNamespaceSchemaLocation="NO_TRANA_1_077_00_04_01_01.xsd" ёФДРЩЫ="ВА°_°..." _ХабДЮаЬ="4.01" ВШЯёЭд="ВА°_°" єЮЫ_ЮЪ="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<_ЮЪгЬХЭв ёФ_ЮЪ="_ЮЬХа_ЮЪгЬХЭвР">
<БТ_ї>


На тесте:
Цитата:
<?xml version="1.0" encoding="windows-1251"?>
<Файл xsi:noNamespaceSchemaLocation="NO_TRANA_1_077_00_04_01_01.xsd" ИдФайл="ТРАНА..." ВерсФорм="4.01" ТипИнф="ТРАНА" КолДок="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Документ ИдДок="НомерДокумента">
<СвНП>


В случае, если set_encoding не трогать, то выгружается в юникоде, причем там и там одинаково.
Названия элементов и части аттрибутов прописаны в программе.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
PK написал:
На разработке (так выглядит при кодировке win)

Ну это ISO-8859-5. Т.е. в дебаггере xml-таблаца должна выглядеть читабельно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 14:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
В дебаггере xml-таблица байтовый строки :)

Т.е. получается, что попытка поставить windows-1251 на разработке преобразует не в cp1251, а в iso?
Тогда какие могут быть причины этого?

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, мар 27 2008, 15:11 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
PK написал:
В дебаггере xml-таблица байтовый строки :)

Вот бы эти байтовые строки сравнить в таблице перед gui_download и в файле.

PK написал:
Т.е. получается, что попытка поставить windows-1251 на разработке преобразует не в cp1251, а в iso? Тогда какие могут быть причины этого?
А если взять простую строчку текста и выгрузить в ASC формате с кодировкой 1504 через gui_download?

Если имя кодировки неизвестное, то выгружается в utf-8. В старых версиях кодировка windows-1251 не поддерживалась, но может сделали заглушку... Сравните версию и уровень патчей ядра в разработке и продуктиве.


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB