SAP предоставляет разработчикам возможность преобразовывать наборы символов из одной кодовой страницы в другую, из внутреннего представления SAP системы в необходимую кодировку. Кодовая страница представлена четырехзначным номером. Для того чтобы получить описание по номеру кодовой страницы можно воспользоваться ФМ: SCP_CODEPAGE_BY_EXTERNAL_NAME или посмотреть содержимое таблицы TCP00A. Для того чтобы получить кодовую страницу используемую на сервере приложений в настоящий момент, можно воспользоваться статическим методом GET_APPSERVER_CODEPAGE из класса CL_ABAP_CONV_UC_NUMBER.
Примеры кодовых страниц:
Кодовая страница | Текстовое описание |
124 | IBM EBCDIC 00697/00297 |
1100 | iso-8859-1 |
1105 | US-ASCII (7 bits) |
1160 | windows-1252 |
4102 | utf-16be |
4103 | utf-16le |
4110 | utf-8 |
8000 | Shift-JIS |
8300 | BIG5 |
Проблемы, связанные с перекодированием:
- Конвертация не всегда возможна, т.к. символы из исходной кодировки могут не существовать в той, в которую преобразуем.
- Последовательность байтов в исходной кодировке не опознана. Проблема может быть связана с некорректным определением номера исходной кодировки.
Для преобразования в ABAP создан набор классов CL_ABAP_CONV* :
- CL_ABAP_CONV_OBJ – универсальный класс для перекодирования
- CL_ABAP_CONV_IN_CE – преобразование набора символов во внутреннее представление системы
- CL_ABAP_CONV_OUT_CE – преобразование из внутреннего представления системы в указанную кодировку
- CL_ABAP_CONV_X2X_CE – преобразование набора символов из одной кодировки в другую
- CL_ABAP_CONV_UC_NUMBER – преобразование набора символов в формат UNICODE в байтовом представлении.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
REPORT zccc_api. DATA: go_conv_in TYPE REF TO cl_abap_conv_in_ce, go_conv_out TYPE REF TO cl_abap_conv_out_ce, go_conv_obj TYPE REF TO cl_abap_conv_obj, gv_buffer(4) TYPE X, gv_text(100) TYPE C. gv_buffer = '41424332'. " Набор байтов в UTF-8 означает ABC2 go_conv_in = cl_abap_conv_in_ce=>create( ENCODING = 'UTF-8' " Кодировка из которой будем преобразовывать ). go_conv_in->convert( EXPORTING INPUT = gv_buffer IMPORTING DATA = gv_text ). WRITE: / gv_text. CLEAR gv_buffer. go_conv_out = cl_abap_conv_out_ce=>create( ENCODING = 'UTF-8' " Кодировка в которую будем преобразовывать ). go_conv_out->convert( EXPORTING DATA = gv_text IMPORTING buffer = gv_buffer ). WRITE: / gv_buffer. CLEAR gv_text. CREATE OBJECT go_conv_obj EXPORTING incode = 4110 " UTF-8 outcode = 1500. " System CHECK go_conv_out IS BOUND. go_conv_obj->convert( EXPORTING inbuff = gv_buffer outbufflg = 0 IMPORTING outbuff = gv_text ). WRITE: / gv_text. |
Ссылка на SAP Wiki по теме.