[ABAP] ABAP Encoding / Codepage

Übersicht

* Typgruppe ABAP
* Typ: ABAP_ENCOD
* Tabelle: TCP00A

Codepage  Encoding
---------------------
1100      iso-8859-1
1101      ascii
1105      us-ascii (7 bits)
1160      windows-1252
1401      iso-8859-2
4102      utf-16be
4103      utf-16le
4110      utf-8

Links

[ABAP] Konvertierung Integer (ASCII) HEX CHAR

Variante 1 (Integer (ASCII) -> HEX -> Char)

DATA: ascii_hex TYPE x.
DATA: char TYPE c.

DO 26 TIMES.
* INT -> HEX
  ascii_hex = 64 + sy-index.

* HEX -> CHAR
  cl_abap_conv_in_ce=>create( encoding = 'UTF-8' )->convert( EXPORTING input = ascii_hex
                                                             IMPORTING data  = char ).

  WRITE: / sy-index, '->', ascii_hex, '->', char.
ENDDO.

Variante 2 (Char -> Hex -> Integer (ASCII))

DATA: char TYPE c VALUE 'A'.
DATA: ascii_hex TYPE xstring.
DATA: ascii_int TYPE i.

DATA(o_conv) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
o_conv->write( data = char ).

* CHAR -> HEX
ascii_hex = o_conv->get_buffer( ).

* HEX -> INT
ascii_int = ascii_hex.

WRITE: / char, '->', ascii_hex, '->', ascii_int.

Stringkonvertierung ANSI/ASCII Unicode

Quellen:

CodeGuru.com
Microsoft

  • ANSI zu Unicode
char *ansistr = "Hello" // Quelle
BSTR unicodestr; // Ziel

int lenA = lstrlenA(ansistr);
int lenW;

lenW = ::MultiByteToWideChar(CP_ACP, 0, ansistr, lenA, 0, 0);
if (lenW > 0)
{
  unicodestr = ::SysAllocStringLen(0, lenW);
  ::MultiByteToWideChar(CP_ACP, 0, ansistr, lenA, unicodestr, lenW);
}
else
{
   // Fehler
}

// hier Strings auswerten
...

// abschließend String löschen
::SysFreeString(unicodestr);
  • Unicode zu ANSI
BSTR unicodestr = 0; // Quelle
char *ansistr; // Ziel

// Funktion zum Füllen des Quellstrings
SomeCOMFunction(&unicodestr);

int lenW = ::SysStringLen(unicodestr);
int lenA = ::WideCharToMultiByte(CP_ACP, 0, unicodestr, lenW, 0, 0, NULL, NULL);
if (lenA > 0)
{
  ansistr = new char[lenA + 1]; // mit null terminator
  ::WideCharToMultiByte(CP_ACP, 0, unicodestr, lenW, ansistr, lenA, NULL, NULL);
  ansistr[lenA] = 0; // hier kann der null terminator gesetzt werden
}
else
{
    // Fehler
}

// hier Strings auwerten
...

// abschließend Strings löschen
delete[] ansistr;
::SysFreeString(unicodestr);

2. Beispiel:

  • ASCII zu Unicode
char cAsciiStr[] = "ASCIIText";
wchar_t wcUnicodeStr[1024];
MultiByteToWideChar(CP_ACP, 0, cAsciiStr, -1, wcUnicodeStr, 1024);
  • Unicode zu ASCII
char cAsciiStr[1024];
wchar_t wcUnicodeStr[] = L"UnicodeText";
WideCharToMultiByte(CP_ACP, 0, wcUnicodeStr, -1, cAsciiStr, 1024, NULL, NULL);