PDA

View Full Version : XML Datei generieren ISO-8859-1



dd3tj
13-04-23, 06:55
Hallo,

ich habe ein Programm das im IFS eine XML Datei erzeugt aber im Kopf steht dann Encoding UTF-8 ich benötige aber ISO-8859-1 .

was müsste ich ändern um ISO-8859-1 zu bekommen?

Hier das Programm
CTL-OPT OPTION(*SRCSTMT:*NODEBUGIO);
DCL-S PDebxml SQLTYPE(XML_CLOB_FILE) ccsid(273);

dcl-s wktime timestamp inz;

exec sql SET OPTION COMMIT = *NONE,
CLOSQLCSR = *ENDMOD,
DATFMT = *ISO ;

time wktime
PDebXml_Name = '/eGECKO/PRD/' + 'Debitor_1_000_' +
'_' + %trim(%char(WKtime)) + '.xml' ;
PDebXml_NL = %len(%trimr(PDebXml_Name)) ;
PDebXml_FO = SQFOVR ;
exec sql values(select
XMLELEMENT(NAME "eGeckoPersonenkonten",
XMLELEMENT(NAME "objectgroupNr", '99'),
(select xmlagg(
XMLELEMENT(NAME "Personenkonto",
XMLELEMENT(NAME "kontenart", 'D'),
XMLELEMENT(NAME "kontonummer", trim(char(kdkdnr) ) ),
XMLELEMENT(NAME "bezeichnung", trim(char(kdkuna) ) ),
XMLELEMENT(NAME "umsatzsteuerIdentNummer", trim(kdidld)
concat trim(kdidnr) ) ) )
from kdst where kdkdar = '1' ))
from sysibm.sysdummy1) into :PDebXml;

*inlr = *on;


Gruß DD3TJ
Thibaut F.

Robi
13-04-23, 10:38
K.a. ob das funktioniert, aber Lt
https://www.ibm.com/docs/en/i/7.4?topic=information-ccsid-values-defined-i

ist 8859-1 die ccsid 819

Fuerchau
13-04-23, 12:56
Die Frage ist auch hier, wo gebe ich das "Encoding" für den XML-Header mit an.
Statt 819 würde ich eher 1252 empfehlen. Die Differenzen sind i.W. nur das €-Zeichen.



<!--?xml version="1.0" encoding="ISO-8859-1"?--><!--?xml version="1.0" encoding="ISO-8859-1"?-->&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;

Andreas_Prouza
13-04-23, 13:42
Grundsätzlich kannst du beim XMLSERIALIZE das Encoding ausgeben lassen.
Das Encoding ergibt sich aus dem Inhalt automatisch:



values(
xmlserialize (
xmldocument(
xmlelement(name "tag", 'wert')
)
As clob(1k) CCSID 1141 INCLUDING xmldeclaration
)
)




<?xml version="1.0" encoding="IBM01141"?><tag>wert</tag>


Ich kann nur keine CCSID 819 dort angeben.

Fuerchau
13-04-23, 15:41
Aber 1252 sollte gehen. Korrekt wäre aber ISO-8859-1;-).
Bei 1252 könnte man dann die Ausgabedatei aber manuell oder per Script das Encoding anpassen.

dd3tj
14-04-23, 09:28
Leider geht 1252 nicht.

auch mit der SQL Funktion CALL QSYS2.OVERRIDE_QAQQINI kann ich weder 819 noch 1252 setzen
1141 oder 237 sind kein Problem

also wie könnte ich es hinbekommen?

Fuerchau
14-04-23, 09:34
Mit 1141 erstellen, per CPY in 1252 umwandeln und den Header per EDTF editieren.
Das Ganze geht auch in RPG.
Das Dockument in ein CLOB (max. 16MB sollten ja reichen) laden.
Per scanreplace den Header anpassen.
Per SQLTYPE(CLOB_FILE) die Datei ins IFS mit 1252 schreiben.

https://www.ibm.com/docs/en/i/7.4?topic=dlhviiratus-lob-file-reference-variables-in-ile-rpg-applications-that-use-sql