Error XML Parser. Nach Unicode Umstellung


Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Moderatoren: Jan, Steff

Error XML Parser. Nach Unicode Umstellung

Beitragvon isp » 05.09.2018, 10:45

Hallo,

ich habe ein Problem nach der Unicode Umstellung.
Code: Alles auswählen
** Ausgabeobjekt erzeugen
  lr_ostream_string = lr_streamfactory->create_ostream_cstring(
                                 string = lf_xmlstring ).

** Ausgabeobjekte öffnen

  lr_ostream_string->open( ).

** Datei nach Character-Set erzeugen und kanonisieren


  lr_encoding = lr_ixml->create_encoding( character_set = 'UTF-8'
                                          byte_order    = 0 ).

  lr_ostream_string->set_encoding( encoding = lr_encoding ).
  lr_ostream_string->set_pretty_print( pretty_print = lf_pretty_print ).

** Erzeuge ein Rendererobjekt

  lr_renderer_string = lr_ixml->create_renderer( document = lr_document
                                         ostream  = lr_ostream_string ).


** Rendern
  lf_var_ret_string = lr_renderer_string->render( ).

  lf_xmlparse = lf_xmlstring.

* Erzeuge XML-Stream
  lr_istream = lr_streamfactory->create_istream_string( string =
                                                       lf_xmlparse ).
* Öffnen des Eingabestreams
  lr_istream->open( ).

* Erzeuge XML-Parser
  lr_parser = lr_ixml->create_parser( stream_factory = lr_streamfactory
                                      istream        = lr_istream
                                      document       = lr_document ).

* Parsen des Streams + Abbildung als DOM im XML-Document-Objekt
  IF lr_parser->parse( ) NE 0.


.......

an dieser Stelle wirft die Methode parse diese Fehlermeldung aus: "Parserfehler bei Dateierzeugung..."

Die Variable lf_xmlstring im XML Ansicht sieht wie ein normale XML aus. Im Schnellanzeige Modus sind dort irgendwelche chinesische Zeichen drin (s.h. Anhang)...

Vor der Uncode-Umstellung funktionierte alles richtig und die XML-Datei konnte erzeugt werden... jetzt hackt's an der Parse-Methode und bricht ab...
Vielen Dank für Eure Unterstützung!
isp
ForumUser
 
Beiträge: 39
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Error XML Parser. Nach Unicode Umstellung

Beitragvon a-dead-trousers » 05.09.2018, 15:01

Du verwendest einen CSTRING und renderst da UTF-8 hinein.
Das kann nicht funktionieren, weil der CSTRING in SAP UTF-16LE ist.
Intern wird hier der (binäre) UTF-8 String 1:1 in den UTF-16LE String umgewandelt. Da hier die Zeichen mal 2 und dann wieder 4 Bytes haben können, kommt in der Darstellung dann so ein Kauderwelsch heraus.
Verwende stattdessen entweder einen XSTRING für das Rendern und Parsen oder das richtige Encoding.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: Error XML Parser. Nach Unicode Umstellung

Beitragvon isp » 12.09.2018, 10:27

a-dead-trousers hat geschrieben:Du verwendest einen CSTRING und renderst da UTF-8 hinein.
Das kann nicht funktionieren, weil der CSTRING in SAP UTF-16LE ist.
Intern wird hier der (binäre) UTF-8 String 1:1 in den UTF-16LE String umgewandelt. Da hier die Zeichen mal 2 und dann wieder 4 Bytes haben können, kommt in der Darstellung dann so ein Kauderwelsch heraus.
Verwende stattdessen entweder einen XSTRING für das Rendern und Parsen oder das richtige Encoding.


Danke!
ich habe die Stelle angepasst, statt UTF-8 verwende ich jetzt die UTF-16:
Code: Alles auswählen
 lr_encoding = lr_ixml->create_encoding( character_set = 'UTF-16'
                                          byte_order    = 0 ).


dann funktioniert der Parser und im Debugger sehe ich die XML-Struktur und Daten ganz normal...

ich habe aber jetzt Problem in dem Funktionsbaustein weiter:

Code: Alles auswählen
     OPEN DATASET lf_outputfilename
      FOR OUTPUT IN LEGACY BINARY MODE.


die Datei wird jetzt erzeugt, aber kein Inhalt drin.

dann habe ich den Zusatz LEGACY rausgenommen, die Datei wird erzeugt und Daten werden geschrieben, aber nicht vollständig und bricht an der Stelle auch ab.

Verstehe aber nicht warum, wird überhaupt eine Datei erstellt und warum bricht es ab.
Ist bei OPEN DATASET noch was zu beachten?

außerdem, den Inhalt der erzeugten Datei kann ich über AL11 nicht mehr ansehen... nur runterladen und dann ist der Inhalt ansehbar..
isp
ForumUser
 
Beiträge: 39
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Error XML Parser. Nach Unicode Umstellung

Beitragvon a-dead-trousers » 12.09.2018, 14:53

isp hat geschrieben:außerdem, den Inhalt der erzeugten Datei kann ich über AL11 nicht mehr ansehen... nur runterladen und dann ist der Inhalt ansehbar..

Klar, weil du die Datei als UTF-16 abgelegt hast und die AL11, soweit ich weis, versucht als UTF-8 oder ISO-8859-1 einzulesen.
isp hat geschrieben:die Datei wird jetzt erzeugt, aber kein Inhalt drin.

dann habe ich den Zusatz LEGACY rausgenommen, die Datei wird erzeugt und Daten werden geschrieben, aber nicht vollständig und bricht an der Stelle auch ab.

Verstehe aber nicht warum, wird überhaupt eine Datei erstellt und warum bricht es ab.
Ist bei OPEN DATASET noch was zu beachten?

Normalerweise nimmt das OPEN DATASET auch Codepage-Konvertierungen vor. Dem kannst du entgegenwirken indem du die Konvertierung selber machst und die Daten als Binärstream rausschreibst. Außerdem kriegst du dann "aussagekräftige" Fehlermeldungen zurück und nicht einfach nur einen Abbruch mit SY-SUBRC.
Code: Alles auswählen
lr_convert = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ). "Oder welche Kodierung du halt haben möchtest
lr_convert->convert( exporting data = ld_string
                     importing buffer = ld_xstring ).
OPEN DATASET ld_file FOR OUTPUT IN BYTE MODE.
TRANSFER ld_xstring TO ld_file.
CLOSE DATASET ld_file.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in


Zurück zu ABAP® Core

  Aktuelle Beiträge   
Java & Bildbearbeitung
vor 19 Stunden von Madredure 0 Antw.
Call Transaction WE20 mit Werteübergabe
vor 18 Stunden von ewx 1 Antw.
gelöst Vergleich Customizing Tabellen auf zwei Systemen
vor 5 Minuten von hausi 3 Antw.
Empfehlung Antiviren-Programm?
vor 20 Stunden von Madredure 2 Antw.
BADI im Customizing finden
Gestern von Romaniac 0 Antw.

  Ähnliche Beiträge beta
Unicode-Umstellung
12.03.2007, 08:43 von Frank Dittrich 2 Antw.
Unicode-Umstellung: Codepages
23.09.2013, 16:36 von neXXus 5 Antw.
UNICODE-String nach EXECL-2003 (XP) via OLE
05.03.2007, 10:36 von fritz_herma 0 Antw.
Unicode-Strings via ABAP-OLE2 to EXCEL (NON-Unicode-SAP-Sys)
15.03.2007, 14:17 von fritz_herma 0 Antw.
Code Umstellung auf Inner Join
23.03.2004, 10:23 von Timo2 3 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]