NBSP: Der falsche Space in ABAP
Veröffentlicht am 19. Juli 2024 von | ABAP |
Im DSAG Forum ist gerade eine Frage aufgetaucht, die ich hier mal in aller Öffentlichkeit und für Google auffindbar beantworten möchte. Das Problem tritt sicherlich öfter auf.
"Ich habe in einer internen Tabelle in den Zeilen einen Inhalt, der mir im Debugger hexadezimal mit
A000
angezeigt wird. Die Tabelle wird über den FunktionsbausteinTEXT_CONVERT_XLS_TO_SAP
erzeugt / hochgeladen... Was bedeutet dieser Hex-Code? Gibt es noch ähnliche... Im ABAP-Programm werden mehrere Zellen per Concatentate zusammengebastelt (Akademischer Grad, Vorname und Nachname). Wenn der Akademische Grad diesen Wert (A000) hat, woher kommt der... Welche Werte könnte man evtl. durch space austauschen und wie....."Frage aus dem DSAG Forum
Der große und der kleine Endian
Wenn man nach A000 in Unicode Tabellen sucht, so findet nur ein Zeichen "ꀀ", das man nicht erwarten würde. Das liegt an dem Little- & Big-Endian Problem, siehe Wikipedia Byte-Reihenfolge. Ich hatte wirklich gehofft, dass man damit im Jahre 2024 nichts mehr zu tun haben wird. Da hab ich mich wohl getäuscht.
Ein unsichtbarer Bösewicht
Tatsächlich muss man die Bytes umdrehen, so dass daraus 00A0 wird. Dann handelt sich hierbei um ein No Break Space aka. NBSP. Das wird gerne verwendet, wenn man einen Zeilenumbruch im HTML verhindern will. Sieht aus wie ein Space, der aber im SAP immer wieder Probleme bereitet. Im BW hatte ich schon viel Spaß mit dem Ding, siehe auch mein Artikel über die nicht erlaubten Zeichen im BW
Im Debugger validieren
Da man in Eclipse den NBSP nicht eingeben kann, musste ich im Debugger den Wert einer Variable setzen und mir diese dann im HEX-Modus anzeigen lassen:
Hier sieht man schön, dass es sich um das gesuchte A000 handelt.
Und jetzt Suchen/Ersetzen
Mit den ABAP-Funktion REPLACE
kann man den Störenfried ganz schnell durch ein anständiges Leerzeichen ersetzen.
data(cleaned) = replace( pcre = '\x{00A0}'
val = strg
with = ` `
occ = 0 ).
Ich hoffe, das hilft.
Viele Grüße & ein schönes Wochenende,
Jörg