В перекодировании текста в ABAP есть только одна загвоздка - номер кодировки для SAP. Решив этот вопрос - легко решается все остальное. По этому поводу я решил написать маленькую программку, которая конвертирует текст из UTF-8 в UTF-16LE. Цель этого скрипта не просто показать конкретно конвертирование кодировок, а создать некоторую универсальность и понятность в перекодировании в целом.
REPORT z_test. DATA: lv_extname_from TYPE string. " Внешнее имя кодировки из которой кодируем DATA: lv_extname_to TYPE string. " Внешнее имя кодировки в которую кодируем DATA: lv_codepage_from TYPE cpcodepage. " Номер кодировки в САПе из которой кодируем DATA: lv_codepage_to TYPE cpcodepage. " Номер кодировки в САПе в которую кодируем DATA: lv_doc TYPE string. " Текст для перекодирования DATA: go_conv_obj TYPE REF TO cl_abap_conv_obj. " Объект для перекодирования START-OF-SELECTION. MOVE: 'UTF-8' TO lv_extname_from. MOVE: 'UTF-16LE' TO lv_extname_to. MOVE: 'Test message' TO lv_doc. * Получим номер кодировки САПа по внешнему имени CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME' EXPORTING external_name = lv_extname_from IMPORTING sap_codepage = lv_codepage_from EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. WRITE: / 'CodePage FROM Error #', sy-subrc, ''. STOP. ENDIF. * Получим номер кодировки САПа по внешнему имени CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME' EXPORTING external_name = lv_extname_to IMPORTING sap_codepage = lv_codepage_to EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. WRITE: / 'CodePage TO Error #', sy-subrc, ''. STOP. ENDIF. WRITE: / 'Encode from',lv_extname_from, 'to', lv_extname_to. WRITE: / 'Encoding.START'. * Создадим объект для перекодирования из одной кодировки в другую CREATE OBJECT go_conv_obj EXPORTING incode = lv_codepage_from outcode = lv_codepage_to. * Вызываем метод конвертации go_conv_obj->convert( EXPORTING inbuff = lv_doc outbufflg = 0 IMPORTING outbuff = lv_doc ). WRITE: / 'Encoding.STOP'.
Таким образом можно конвертировать из одной кодировки в другую. Для этого достаточно знать лишь внешнее название кодировки.
Комментарии
Отправить комментарий