Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge Seite 1 von 1
8 Beiträge Seite 1 von 1

Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von Romaniac (Specialist / 107 / 21 / 16 ) » 11. Jun 2019 14:33

Hallo zusammen,

Mein Kollege hat folgendes Problem:

ich erstelle im ERP einen idoc.
unter anderem ist in einem feld (type char255) die anschrift enthalten:
"irgendeine strasse N° 10'
das problem ist das '°' zeichen im feld.

der idoc wird an PI übergeben, das daraus ein xml erzeugt und versendet.
gleichzeitig wird im std. die codepage auf das std-format UTF-8 abgeändert.

mein problem ist nun. dass dieses zeichen in UTF-8 gar nicht existiert.
PI übernimmt dieses zeichen einfach in den tag:

<adress1>irgendeine strasse N° 10</adress1>

das führtin meinem fall dazu, dass das empfangende system einen
oracle-abbruch bekommt.

als erste massnahme habe ich in mein programm eingefügt:
translate segment-feld using '° '.
damit ersetze ich bereits auf erp-seite dieses zeichen durch space.

nun bin ich auf der suche nach einer dynamischen umsetzung.
d.h. ich will alle im ERP verwendeten zeichen, die es in UTF-8 nicht
gibt schon mal durch space ersetzen.

Dann bekam ich den hinweis auf die klassen cl_abap_conv*
damit kann man ein c-feld in utf-8 umwandeln. das ergebnis ist aber ein
xstring.
z.b. habe ich 'AA°BB' dann umgewandelt in 4141C2B04242
in diesem fall wird also das zeichen '°' mit 'C2B0' ersetzt. spitze,
ein byte durch 2 byte !
das hilft mir aber nicht wirklich weiter.

ich suche also einen fuba/methode/syntax, der ich ein c-feld übergebe
und die alle nicht utf-8-character durch space ersetzt.

irgendeine idee ?

bei der annahme von idocs gibt es eine routine, die eine byteumsetzung
vornimmt. das macht sap im std. bei unicode und non-unicode-systemen.
die umsetzung wird dabei mit TRANSLATE ... using.. durchgeführt.
bei dieser umsetzung gibt es einen ellenlangen string für using, der
hart codiert ist.
wenn ich dieselbe lösung wähle, dann bräuchte ich eine liste der
utf-8-konformen zeichen, damit ich alle anderen durch space ersetze.
... die finde ich aber auch nirgends

Vielen Dank und Gruß,

Wolfgang
Geht nicht gibts nicht


Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von edwin (Specialist / 264 / 5 / 41 ) » 11. Jun 2019 14:53

Hi,
x'C2B0' ist aber "°" in UTF-8, und "°" kommt sogar im Standard ASCII vor als x'B0', deshalb verstehe ich nicht, weshalb das Zeichen dir Probleme bereitet.
/Edwin

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von ewx (Top Expert / 4002 / 166 / 378 ) » 11. Jun 2019 15:14

Verstehe ich auch nicht, warum das ° ein Problem darstellen sollte. Vielleicht ist es aber auch nur ein ähnliches Zeichen?
Ansonsten versuche mal regex mit [:print:]

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von centauro_ernst (ForumUser / 6 / 0 / 0 ) » 11. Jun 2019 15:31

Es handelt sich dabei um die Schnittstelle zu einem externen System. Und dieses meldet, dass das 'degree'-sign nicht UTF-8 konform ist.

damit würde ja die sap-konvertierung nach B2C0 korrekt sein.ich kann mich aber erinnern, in einer anderen schnittstelle, wenn ein zeichen = 1 byte konvertiert wurde in ein 2-byte zeichen, dass dann diese verschiebung erhebliche schwierigkeiten bei der verarbeitung ergeben hatte.

damit müsste ich dann alle zeichen ausschliessen, die eine 1 zu 2 byte-konvertierung zur folge haben.

mfg
ernst

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von ewx (Top Expert / 4002 / 166 / 378 ) » 11. Jun 2019 15:46

centauro_ernst hat geschrieben:
11. Jun 2019 15:31
Es handelt sich dabei um die Schnittstelle zu einem externen System. Und dieses meldet, dass das 'degree'-sign nicht UTF-8 konform ist.
Das stimmt wohl auch. ° ist nicht im ASCII-Zeichensatz enthalten.
Wie gesagt: Mit regex und [:print:] alle nicht druckbaren Zeichen Löschen.

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von edwin (Specialist / 264 / 5 / 41 ) » 11. Jun 2019 17:31

stimmt '°' ist nicht im ASCII. Ist aber trotzdem komisch mit diesem UTF-8 Problem - bei [:print:] fliegen dann aber auch alle Umlaute... raus.
Zitat:
"
[:print:] matches a visible character or the space character [\x20-\x7E]
"
/Edwin

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von centauro_ernst (ForumUser / 6 / 0 / 0 ) » 11. Jun 2019 17:34

Dann müsste ja bei der prüfung mit regex und [:print:] das zeichen ° als nicht druckbar erkannt werden.
ist es aber nicht.

Re: Funktion gesucht: Setze Leerzeichen in String für alle Zeichen die nicht in UTF8 vorkommen

Beitrag von edwin (Specialist / 264 / 5 / 41 ) » 11. Jun 2019 17:36

es wird bei [:print:] als "nicht druckbar" erkannt.
/Edwin

Seite 1 von 1


Aktuelle Forenbeiträge

Knobelaufgabe zum Wochenende / Wochenbeginn
vor 12 Stunden von a-dead-trousers 6 / 174
HTTP Request
vor 12 Stunden von a-dead-trousers 2 / 18
BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
MATNR Feldlängenänderung von 18 auf 40
vor 22 Stunden von SAP_ENTWICKLER 4 / 149
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18

Aktuelle Forenbeiträge

Knobelaufgabe zum Wochenende / Wochenbeginn
vor 12 Stunden von a-dead-trousers 6 / 174
HTTP Request
vor 12 Stunden von a-dead-trousers 2 / 18
BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
MATNR Feldlängenänderung von 18 auf 40
vor 22 Stunden von SAP_ENTWICKLER 4 / 149
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18

Unbeantwortete Forenbeiträge

BSP-Seiten als Dienst - Fehler beim Aufrufen
vor 20 Stunden von Xilukarim 1 / 27
CCS Bonusabrechnung
vor 23 Stunden von SAP_ENTWICKLER 1 / 18
Verfügbarkeitsprüfung
Gestern von NoraP 1 / 18
Verwaltung
Gestern von NoraP 1 / 15
At Selection-Screen
Gestern von L0w-RiDer 1 / 42