Ansicht
Dokumentation

CL_ABAP_CONV_OUT_CE - Codepage- und Endian Konvertierung (Systemformat -> Extern)

CL_ABAP_CONV_OUT_CE - Codepage- und Endian Konvertierung (Systemformat -> Extern)

BAL Application Log Documentation   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Eine einfache API zur Codepage-Konvertierung bietet die Klasse CL_ABAP_CONV_CODEPAGE. Die vorliegende Klasse unterstützt auch komplexere Fälle.

Instanzen der Klasse CL_ABAP_CONV_OUT_CE ermöglichen die Konvertierung von ABAP Datenobjekten in Binärdaten. (D.h. Daten im Systemformat werden ausgegeben in ein Fremdformat.)

Unterstützt werden die Konvertierung von Zeichensätzen (für Textdaten) und die Konvertierung der Bytereihenfolge (für numerische Daten).

Ferner gibt es statische Methoden, um zu einem Zeichen in der aktuellen Codepage den zugehörigen hexadezimalen oder dezimalen Wert in der Unicode Codepage zu bestimmen. Dies sind die Methoden CL_ABAP_CONV_OUT_CE=>UCCP und CL_ABAP_CONV_OUT_CE=>UCCPI.

Beziehungen

CL_ABAP_CONV_IN_CE
Konvertierung von Binärdaten in ABAP Datenobjekte.
CL_ABAP_CONV_X2X_CE
Konvertierung von ABAP Datenobjekten zwischen zwei externen Binärformaten.
CL_ABAP_CHAR_UTILITIES
Diverse Attribute und Methoden zu Zeichensätzen und Bytereihenfolge.
CL_NLS_STRUC_CONTAINER
Korrektur der Ausrichtung von Strukturen in Containern vom Typ C (oder STRING). Diese Korrektur ist notwendig, wenn ostasiatische Zeichen ("full-width" Zeichen in Chinesisch, Japanisch und Koreanisch) von einemnicht-Unicode-System in ein Unicode-System oder umgekehrt übertragen werden. Die Korrektur ist nicht notwendig, wenn die Methode CONVERT_STRUC dieser Klasse verwendet wird.

Beispiel

Im folgenden Beispiel werden Text aus der Systemcodepage nach UTF-8 und Zahlen aus dem Systemformat in die little-endian Darstellung konvertiert.

  DATA:

    text(4) TYPE c VALUE 'ABC',

    int TYPE i VALUE 258.

  DATA:

    buffer1 TYPE xstring,

    buffer2 TYPE xstring,

    conv TYPE REF TO cl_abap_conv_out_ce.

  conv = cl_abap_conv_out_ce=>create(

           encoding = 'UTF-8'

           endian = 'L' ).

  conv->convert( EXPORTING data = text

                 IMPORTING buffer = buffer1 ).

  conv->convert( EXPORTING data = int

                 IMPORTING buffer = buffer2 ).

Hier wird zunächst durch Aufruf der Methode CREATE eine Konvertiererinstanz angelegt. Als Parameter können die Ziel-Codepage, die im Ausgabepuffer zu verwendende Bytereihenfolge u.a. angegeben werden.

Nach den Aufrufen von CONVERT enthält die Variable buffer1 die 4 Bytes 41424320, was die (hexadezimale) UTF-8-Darstellung des Textes "ABC" ist. Die Variable buffer2 enthält die 4 Bytes 02010000, die den Wert 258 im little-endian Format repräsentieren.

Details sind in der Dokumentation der jeweiligen Methoden erklärt.

Das folgende Beispiel zeigt, wie Strukturen konvertiert werden können.

  DATA:

    BEGIN OF struc,

      text(5) TYPE c,

      int TYPE i,

    END OF struc.

  DATA:

    buffer TYPE xstring,

    conv TYPE REF TO cl_abap_conv_out_ce,

    view TYPE REF TO cl_abap_view_offlen.

  view = cl_abap_view_offlen=>create_legacy_view( struc ).

  conv = cl_abap_conv_out_ce=>create(

                              encoding = '0120'

                              endian = 'B' ).

  struc-text = 'Abc12'.

  struc-int  = 65538.

  conv->convert_struc( EXPORTING data = struc

                                 view = view

                       IMPORTING buffer = buffer ).

Hier wird mit der Methode CREATE_LEGACY_VIEW das in einem Nicht-Unicode-System übliche Layout bestimmt. (Um das in einem Unicode-System übliche Layout zu bestimmen, gibt es die Methode CREATE_UNICODE16_VIEW.) Als Ziel-Codepage wird '0120' angegeben (SAP-Zeichensatznummer fÜr EBCDIC-Latin-1.) Am Schluß enthält buffer(5) die Bytes C18283F1F2 (für "Abc12") und buffer+8(4) die Bytes 00010002 (für 65538).

Die Klasse CL_ABAP_CONV_OUT_CE besitzt einige weitere Methoden, die ein Stream-orientiertes Modell implementieren: Die ABAP Datenobjekte werden sequentiell in einen binären Ausgabepuffer geschrieben. Diese Methoden werden wie folgt verwendet:

CL_ABAP_CONV_OUT_CE=>CREATE
Siehe oben.
WRITE
Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Anfügen von Daten an das Ende des Ausgabepuffers.
GET_BUFFER
Holen des Ausgabepuffers (Binärstrings) zur weiteren Verarbeitung (Schreiben in eine Datei, Versenden per RFC, o.ä.).
RESET
Einzelne Attribute der Konvertiererinstanz können neu gesetzt werden. (Diese Methode ist insbesondere zum Löschen des Ausgabepuffers unter Beibehaltung der übrigen Attribute gedacht.)

DATA:

  text(100) TYPE C VALUE 'ABC',

  int TYPE I VALUE 258.

DATA:

  buffer TYPE XSTRING,

  conv TYPE REF TO cl_abap_conv_out_ce.

conv = cl_abap_conv_out_ce=>create(

         encoding = 'UTF-8'

         endian = 'L'

       ).

CALL METHOD conv->write( data = text  n = 4 ).

CALL METHOD conv->write( data = int ).

buffer = conv->get_buffer( ).

Die Variable buffer enthält nun den Hexadezimalstring "4142432002010000". Dieser setzt sich zusammen aus:

  • 4 Bytes (hexadezimal "41424320"), welche den String "ABC" in UTF-8 repräsentieren.
  • 4 Bytes (hexadezimal "02010000"), welche den Wert 258 im little-endian Format repräsentieren.

Wenn die gewünschte Bytereihenfolge in dem alten von TRANSLATE ... NUMBER FORMAT erwarteten Format (als N(4) Wert) vorliegt, kann wie folgt vorgegangen werden:

TYPE-POOLS: ABAP.

CLASS cl_abap_char_utilities DEFINITION LOAD.

DATA:

  number_format(4) TYPE N VALUE '0101'.

DATA:

  endian TYPE ABAP_ENDIAN,

  conv TYPE REF TO cl_abap_conv_out_ce.

endian = cl_abap_char_utilities=>number_format_to_endian(

           number_format

         ).

conv = cl_abap_conv_out_ce=>create(

         encoding = 'UTF-8'

         endian = endian

       ).

Hinweise

Details sind in der Dokumentation der jeweiligen Methoden erklärt.

Weiterführende Informationen






ABAP Short Reference   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 13157 Date: 20240426 Time: 164404     sap01-206 ( 101 ms )