Ansicht
Dokumentation
CL_ABAP_CONV_OUT_CE - Codepage- und Endian Konvertierung (Systemformat -> Extern)
BAL Application Log Documentation 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_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
- Konvertierung von Binärdaten in ABAP Datenobjekte.
- 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 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:
- Siehe oben.
- Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Anfügen von Daten an das Ende des Ausgabepuffers.
- Holen des Ausgabepuffers (Binärstrings) zur weiteren Verarbeitung (Schreiben in eine Datei, Versenden per RFC, o.ä.).
-
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 )