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 / 256 / 5 / 39 ) » 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 / 3964 / 164 / 366 ) » 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 / 3964 / 164 / 366 ) » 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 / 256 / 5 / 39 ) » 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 / 256 / 5 / 39 ) » 11. Jun 2019 17:36

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

Seite 1 von 1

Aktuelle Forenbeiträge

Adobe LiveCycle Designer - Ausblenden Text auf letzter Seite
vor 39 Minuten von a-dead-trousers 2 / 35
ABAP Clean Code
vor 12 Stunden von ralf.wenzel 68 / 2197
Variable footer lines für line count
vor 16 Stunden von ewx 4 / 68
Quellcodeänderung mehrerer Programme
vor 16 Stunden von Ben2408 12 / 360
Formular 'HR_DE_BEA_AB_V03_MV' hochladen gelöst
vor 20 Stunden von Kerstin 4 / 92

Unbeantwortete Forenbeiträge

DOCVARIABLE in Worddokument setzen (OLE?)
vor 20 Stunden von msfox 1 / 25
BAPI_PO_CREATE1 und Einkaufsinfosatz
vor 2 Tagen von SweetRuedi 1 / 68
WCOCO: Gruppe für Betragsfelder 0S01
vor 4 Tagen von SAP_ENTWICKLER 1 / 44
CAS-Nr.: Chemical Abstracs Service
vor 6 Tagen von SAP_ENTWICKLER 1 / 81
Interaktives Skript, Rolle IC-Manager
vor 2 Wochen von erubadhron86 1 / 121