Привет, коллеги.
Заранее приношу извинения за довольно заезженную тему. Но, к сожалению, поиск по форуму и многочисленные (в т.ч. полезные) ответы специалистов не помогают решить проблему.
А проблема такова:
Ситема ECC 6.0, Юникод. Файл с текстовой кириллической информацией загружается в систему стандартной программой (тр. FF_5, выписка банка). Кодировка, используемая в файле - DOS 866. После загрузки файла и до его обработки следующим алгоритмом программы мне становится доступен массив строк типа c в user-exit'е. Кириллица на этом этапе отображается, как набор символов псевдографики (видимо, при запуске UPLOAD-функции SAP по-умолчанию использовала CODEPAGE 1504 вместо нужной 1503).
Вопрос - как перекодировать, чтобы кириллица приняла нормальный вид?
Пробовал вот что (с разнообразными вариациями):
Исходная строка:
— >24ЋЇ« в § в®ў а. ‚Є«оз п Ќ„>25‘ 30508.47а.
Код (спасибо
sibrin за пример
http://sapboard.ru/forum/viewtopic.php?t=25668&start=0&postdays=0&postorder=asc&highlight=buf+1024)
Code:
DATA:
buf(1024) TYPE x,
conv TYPE REF TO cl_abap_conv_x2x_ce,
view TYPE REF TO cl_abap_view_offlen,
conv2 TYPE REF TO cl_abap_conv_x2x_ce.
FIELD-SYMBOLS: <c> TYPE c.
LOOP AT t_raw_data into lf_raw_data.
ASSIGN buf TO <c> CASTING.
<c> = lf_raw_data.
conv = cl_abap_conv_x2x_ce=>create( in_encoding = '1500' out_encoding = '1504' input = buf IGNORE_CERR = ABAP_TRUE ).
conv->convert_c( ).
buf = conv->get_out_buffer( ).
lf_raw_data = <c>.
conv2 = cl_abap_conv_x2x_ce=>create( in_encoding = '1503' out_encoding = '1500' input = buf IGNORE_CERR = ABAP_TRUE ).
conv2->convert_c( ).
buf = conv2->get_out_buffer( ).
lf_raw_data = <c>.
modify t_raw_data from lf_raw_data index sy-tabix.
ENDLOOP.
Результирующая строка практически не изменилась.
Всем заранее спасибо за помощь.