Ansicht
Dokumentation

ABENCHARACTER_SETS - CHARACTER SETS

ABENCHARACTER_SETS - CHARACTER SETS

General Data in Customer Master   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ABAP-Zeichensatz

Der Application Server ABAP unterstützt im aktuellen Release nur noch Unicode-Systeme:

  • Ein Unicode-System is ein AS ABAP, das auf einer Unicode-Zeichendarstellung mit einer Codepage für Unicode beruhen und denen ein entsprechendes Betriebssystem samt Datenbank zugrunde liegt.

Unicode (ISO/IEC 10646) mit dem Zeichensatz UCS, umfasst alle vorhandenen Schriftzeichen. Für den Unicode-Zeichensatz gibt es verschiedene Unicode-Zeichendarstellungen wie UTF, in denen ein Zeichen zwischen einem und vier Byte belegen kann oder UCS-2, in dem ein Zeichen zwei Byte belegt.

  • Die Programmiersprache ABAP unterstützt die Zeichendarstellung UCS-2, die eine Teilmenge der in UTF-16 enthaltenen Zeichen darstellt. Sie umfasst die Basic Multilingual Plane (BMP) des Unicode-Standards mit Ausnahme der Zeichen des Surrogat-Bereichs.

Die Einschränkung auf UCS-2 in ABAP bedeutet, dass für die Länge eines Zeichens immer zwei Byte angenommen werden. Jede gültige, in UTF-16 kodierte Zeichenkette ist gleichzeitig eine gültige, in UCS-2 kodierte Zeichenkette (die möglicherweise andere Zeichen darstellt). Jedoch ist nicht jede gültige, in UCS-2 kodierte Zeichenkette auch eine gültige, in UTF-16 kodierte Zeichenkette, da es zu High- und Low-Surrogaten kommen kann, die nicht Teil des Surrogat-Paars sind. Dies führt in aller Regel aber nur dann zu Problemen, wenn Zeichenketten inmitten der Darstellung eines Zeichens aus dem Surrogat-Bereich von UTF-16 abgeschnitten werden, oder wenn in der Zeichenkettenverarbeitung einzelne Zeichen von Zeichenmengen verglichen werden. Außerdem können Transformationen von Zeichenketten in externe Formate, die gültige Unicode-Zeichen erwarten (z.B. XML), zu Ausnahmen führen.

Für die Verwendung in einem Unicode-System muss ein Programm die ABAP-Sprachversion haben. Programme der obsoleten Sprachversion können in einem Unicode-System nicht verwendet werden.

Hinweise

  • Die für einen AS ABAP verwendete Unicode-Version kann in der Transaktion SM51 Release Notes eingesehen werden.
  • Das Attribut CHARSIZE der Systemklasse CL_ABAP_CHAR_UTILITIES enthält die Anzahl Bytes, die ein Zeichen im aktuellen System belegt.
  • Bei regulären Ausdrücken in PCRE-Syntax kann festgelegt werden, ob gültige UTF-16-Zeichenketten erwartet werden oder nicht.
  • Vor der Unterstützung von Unicode wurden von SAP unterschiedliche Codes für die Darstellung von Zeichen verschiedener Schriften verwendet, wie zum Beispiel ASCII, EBCDIC als Single-Byte- Codepages oder Double-Byte-Codepages:
  • ASCII (American Standard Code for Information Interchange) kodiert jedes Zeichen durch ein Byte. Damit lassen sich höchstens 256 Zeichen darstellen (Genau genommen verschlüsselt Standard-ASCII ein Zeichen nur durch 7 Bit und kann daher nur 128 Zeichen abbilden, die Erweiterung auf 8 Bit erfolgt durch ISO-8859). Gebräuchliche Codepages sind zum Beispiel ISO-8859-1 für westeuropäische oder ISO-8859-5 für kyrillische Schriften.

  • EBCDIC (Extended Binary Coded Decimal Interchange Code) kodiert ebenfalls jedes Zeichen durch ein Byte, womit sich wiederum 256 Zeichen abbilden lassen. EBCDIC 0697/0500 ist beispielsweise ein IBM-Format, das zum Beispiel auf der Plattform AS/400 (jetzt IBM System i) für westeuropäische Schriften verwendet wurde.

  • Double-Byte-Codepages benötigen 1 bis 2 Byte je Zeichen. Dadurch lassen sich 65 536 Zeichen darstellen, wobei in der Regel nur 10 000 bis 15 000 Zeichen belegt sind. Als Codepages werden zum Beispiel SJIS für die japanische und BIG5 für die traditionelle chinesische Schrift verwendet.

Mit diesen Zeichensätzen können in einem AS ABAP alle Sprachen einzeln abgedeckt werden. Schwierigkeiten traten in der Regel immer dann auf, wenn in einem zentralen System Texte aus verschiedenen inkompatiblen Zeichensätzen gemischt werden sollten. Auch der Austausch von Daten zwischen Systemen mit inkompatiblen Zeichensätzen kann zu Problemen führen.
  • In früheren Nicht-Unicode-Systemen waren die System-Codepages in der Datenbanktabelle TCPDB definiert. In Nicht-Unicode-Single-Codepage-Systemen gab es nur eine System-Codepage. In den obsoleten MDMP-Systemen gab es mehrere System-Codepages.
  • Vor der Unterstützung von Unicode gingen viele ABAP-Programmiertechniken davon aus, dass ein Zeichen einem Byte entspricht. Bevor ein noch vorhandenes Nicht-Unicode-System auf Unicode umgestellt wird, müssen ABAP-Programme deshalb überall dort geändert werden, wo eine explizite oder implizite Annahme über die interne Länge eines Zeichens gemacht wird. Davon betroffen sind im Wesentlichen

  • der Zugriff auf Strukturen. Letzteres ist der Fall, da flache Strukturen in einem Programm der obsoleten ABAP-Sprachversion wie ein zeichenartiges Datenobjekt behandelt wurden und manche Programmiertechniken davon auch Gebrauch gemacht haben. Für die Behandlung von Strukturen gibt es die sogenannte Strukturfragmentsicht.

Für eine Umstellung eines Programms auf Unicode muss in den Programmeigenschaften die ABAP-Sprachversion oder höher gesetzt werden. Für diese Versionen werden auch in Nicht-Unicode-Systemen die Unicode-Prüfungen ausgeführt. Die Transaktion UCCHECK unterstützt das Einschalten dieser Prüfungen für vorhandene Programme. Statt der Transaktion UCCHECK kann auch das Programm RSUNISCAN_FINAL verwendet werden.

Beispiel

Die UTF-8-Darstellung des Unicode-Zeichens EXTRATERRESTRIAL ALIEN wird in seine UTF-16 Darstellung konvertiert und im Textfeld surrogate_pair abgelegt. Obwohl das Unicode-Zeichen EXTRATERRESTRIAL ALIEN nicht in der Basic Multilingual Plane (BMP) des Unicode-Standards enthalten ist, kann seine UTF-16-Darstellung (ein Surrogat-Paar) dennoch als ABAP-Zeichenkette abgelegt werden. Allerdings behandelt fast jede Zeichenkettenoperation in ABAP die Zeichenkette einfach als zwei UCS-2-Zeichen mit der Zeichenkettenlänge 2. Dies kann beim Interpretieren der Daten als UTF-16 außerhalb von ABAP zu Problemen führen. Die Ergebnisse der beiden Offset-/Längenzugriffe führen zu Textfeldern der Länge 1 mit dem hexadezimalen Inhalt 3DD8 und 7DDC. Da High- und Low-Surrogate nur Teil eines Surrogat-Paars sein und nicht eigenständig in einer gültigen UTF-16-Zeichenkette erscheinen können, enthalten die Textfelder ungültige UTF-16-Zeichenketten. In einem regulären Ausdruck in PCRE-Syntax, der durch (*UTF) eingeleitet wird, werden gültige UTF-16-Zeichenfolgen erwartet und es kommt zu einer Ausnahme.






rdisp/max_wprun_time - Maximum work process run time   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11695 Date: 20240523 Time: 184005     sap01-206 ( 116 ms )