Ansicht
Dokumentation

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

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

rdisp/max_wprun_time - Maximum work process run time   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_IN_CE ermöglichen die Konvertierung von Binärdaten in gültige ABAP Datenobjekte. (D.h. Daten in einem externen Format werden eingelesen in das Systemformat.)

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 aus einem hexadezimalen oder dezimalen Unicode-Wert ein einzelnes Zeichen in der aktuellen Codepage zu erzeugen. Dies sind die Methoden CL_ABAP_CONV_IN_CE=>UCCP und CL_ABAP_CONV_IN_CE=>UCCPI.

Beziehungen

CL_ABAP_CONV_OUT_CE
Konvertierung von ABAP Datenobjekten in ein externes Binärformat.
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 einem nicht-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 von UTF-8 in die Systemcodepage und Zahlen aus der little-endian Darstellung in das Systemformat konvertiert.

  DATA:

    text(100) TYPE c,

    int TYPE i,

    buffer(4) TYPE x,

    conv TYPE REF TO cl_abap_conv_in_ce.

  conv = cl_abap_conv_in_ce=>create(

          encoding = 'UTF-8'

          endian = 'L' ).

  buffer = '41424320'.

  conv->convert(

    EXPORTING input = buffer

    IMPORTING data = text ).

  buffer = '02010000'.

  conv->convert(

    EXPORTING input = buffer

    IMPORTING data = int ).

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

Nach den Aufrufen der Methode CONVERT enthält die Variable text den Inhalt "ABC" und die Variable int den Wert 258.

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

Im folgenden Beispiel wird der Inhalt eines Binärstrings nach Konvertierung in einer Struktur abgelegt. Der Binärstring kann z.B. per RFC empfangen oder aus einer Datei gelesen worden sein. In diesem Beispiel hat der Binärstring das in einem Nicht-Unicode-System übliche Layout; deshalb rufen wir die Methode CREATE_LEGACY_VIEW. (Um das Layout in Unicode-Systemen zu bestimmen, gibt es die Methode CREATE_UNICODE16_VIEW.)

  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_in_ce,

    view TYPE REF TO cl_abap_view_offlen.

  conv = cl_abap_conv_in_ce=>create(

            encoding = '0120'

            endian = 'B' ).

  view = cl_abap_view_offlen=>create_legacy_view( struc ).

  buffer = 'C18283F1F250505000010002'.

  conv->convert_struc(

        EXPORTING input = buffer

                  view = view

        IMPORTING data = struc ).

Der Inhalt der Variablen buffer setzt sich zusammen aus

  • 5 Bytes (hexadezimal "C18283F1F2"), welche den String "Abc12" in EBCDIC-Latin-1 (SAP-Zeichensatz '0120') repräsentieren
  • einer Alignmentlücke von 3 Bytes; der Inhalt dieser Bytes ("505050") wird ignoriert
  • 4 Bytes (hexadezimal "00010002"), die den Wert 65538 im big-endian Format repräsentieren.

Dieses Beispiel-Programm führt auf Unicode- wie auch Nicht-Unicode-Systemen zu folgendem Ergebnis:

  • struc-text enthält die Zeichen "Abc12".
  • struc-int enthält die Zahl 65538.

Die Klasse CL_ABAP_CONV_IN_CE besitzt einige weitere Methoden, die ein Stream-orientiertes Modell implementieren: Die ABAP Datenobjekte werden sequentiell aus einem binären Eingabepuffer gelesen. Diese Methoden werden wie folgt verwendet:

CL_ABAP_CONV_IN_CE=>CREATE
Eine Konvertiererinstanz wird angelegt, wobei als Parameter der Eingabepuffer (d.h. der Binärstring, welcher die zu lesenden Daten enthält) angegeben wird.
READ
Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Abarbeiten von Daten aus dem Eingabepuffer.
RESET
Einzelne Attribute der Konvertiererinstanz können neu gesetzt werden. (Diese Methode dient insbesondere zum Aufsetzen auf einen neuen Eingabepuffer unter Beibehaltung der übrigen Attribute.)

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

DATA:
  text(100) TYPE C,
  int TYPE I.

DATA:
  buffer TYPE XSTRING,
  conv TYPE REF TO cl_abap_conv_in_ce.

buffer = '4142432002010000'.

conv = cl_abap_conv_in_ce=>create(
         encoding = 'UTF-8'
         endian = 'L'
         input = buffer ).

CALL METHOD conv->read(
  EXPORTING n    = 4
  IMPORTING data = text ).
CALL METHOD conv->read(
  IMPORTING data = int ).

Der Inhalt der Variablen buffer setzt sich zusammen aus 4 Bytes (hexadezimal "41424320"), welche den String "ABC" in UTF-8 repräsentieren und 4 Bytes (hexadezimal "02010000"), welche den Wert 258 im little-endian Format repräsentieren. Diese Daten werden in die entsprechenden Werte im aktuellen Systemformat konvertiert:

  • Die Variable text enthält nun die Zeichenfolge "ABC". (Man beachte, daß sich die Längenangabe n = 4 auf die Anzahl der zu konvertierenden Zeichen bezieht.)
  • Die Variable int enthält nun den Wert 258.

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,

  buffer TYPE XSTRING,

  conv TYPE REF TO cl_abap_conv_in_ce.

endian = cl_abap_char_utilities=>number_format_to_endian(

           number_format

         ).

conv = cl_abap_conv_in_ce=>create(

         encoding = 'UTF-8'

         endian = endian

         input = buffer

       ).

Im folgenden Beispiel wird der Inhalt eines Binärstrings nach Konvertierung in einer Struktur abgelegt.


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_in_ce,
  view TYPE REF TO cl_abap_view_offlen.

  view = cl_abap_view_offlen=>create_legacy_view( struc ).

  buffer = 'C18283F1F250505000010001'.

  conv = cl_abap_conv_in_ce=>create(
  encoding = '0120'
  endian = 'B'
  input = buffer ).

CALL METHOD conv->read(
  EXPORTING view = view
  IMPORTING data = struc ).

Der Inhalt der Variablen buffer setzt sich zusammen aus

  • 5 Bytes (hexadezimal "C18283F1F2"), welche den String "Abc12" in EBCDIC-Latin-1 (SAP-Zeichensatz '0120') repräsentieren
  • einer Alignmentlücke von 3 Bytes; der Inhalt dieser Bytes ("505050") wird ignoriert
  • 4 Bytes (hexadezimal "00010001"), die den Wert 65537 im big-endian Format repräsentieren.

Dieses Beispiel-Programm führt auf Unicode- wie auch Nicht-Unicode-Systemen zu folgendem Ergebnis:

  • struc-text enthält die Zeichen "Abc12".
  • struc-int enthält die Zahl 65537.

Hinweise

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

Weiterführende Informationen






Addresses (Business Address Services)   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14691 Date: 20240425 Time: 144354     sap01-206 ( 123 ms )