Текущее время: Сб, авг 02 2025, 12:32

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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