Ansicht
Dokumentation
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 CurrencyDiese Dokumentation steht unter dem Copyright der SAP AG.
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
- Konvertierung von ABAP Datenobjekten in ein externes Binärformat.
- Konvertierung von ABAP Datenobjekten zwischen zwei externen Binärformaten.
- Diverse Attribute und Methoden zu Zeichensätzen und Bytereihenfolge.
- 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:
- Eine Konvertiererinstanz wird angelegt, wobei als Parameter der Eingabepuffer (d.h. der Binärstring, welcher die zu lesenden Daten enthält) angegeben wird.
- Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Abarbeiten von Daten aus dem Eingabepuffer.
- 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 )