-
Morgen,
die CCSIDs der XML Dateien ist 1208. Die XML wird bereits mit dieser CCSID erstellt.
Wenn ich mit chgjob + F4 reingehe sehe ich folgende Sprachattribute:
Code:
Sprachen-ID . . . . . . . . . . LANGID DEU
Landes- oder Regions-ID . . . . CNTRYID DE
Zeichensatz-ID . . . . . . . . . CCSID 273
Das temporäre ändern auf die CCSID 1141 wie auf der vorigen Seiten beschrieben brachte leider auch keine Lösung...
Wie sieht es denn aus wenn einer von euch den XML Response einmal einließt, könnte man das Problem dann nicht eventuell weiter eingrenzen? Dafür muss ja eigentlich nur die Webservice DS, XMLOPTIONS und das XML INTO aus meinem geteilten Quellcodeausschnitt genommen und compiliert werden. Den Pfad zur XML kann man dann ja selber hinterlegen.
Wäre dazu jemand bereit?
EDIT: Eben auch per WRKLNK mir die HEX Werte angeschaut da steht dann auch wie du bereits gemeint hast C2BC drinn für die beiden Zeichen(ü).
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
Nun, wenn man sucht wird man fündig:
http://www.code400.com/forum/forum/i...n-utf-8-string
So, wie es aussieht, wird beim XML-Into UTF-8 native gar nicht unterstützt.
"The following Unicode CCSIDs are supported: 1200, 13488, 17584."
Du brauchst dich also nicht weiter zu bemühen.
Was du nun also brauchst ist eine Konvertierung an anderer Stelle.
Hierzu musst du deinen SQL modifizieren:
Ggf. benötigst du auch einen Doppelcast, da ich nicht weiß, was denn die SQL-Funktion als CCSID-Typ zurückgibt.
cast(cast(cast(systools.httpgetclob(...) as blob) as clob(1M, 1208)) as clob(1M, 1200))
Somit solltest du die XML-Datei dann als UTF-16 (CCSID 1200) erstellt haben, was vom XML-Into unterstützt wird.
Statt clob(1M, 1200) funktioniert ggf. auch NCLOB.
Alternativ kannst du auch per QSH den Befehl "iconv" aufrufen. Mit diesem kannst du die IFS-Datei in eine andere CCSID konvertieren.
Bleibt halt nur die Frage offen, warum die IBM die 1208 nicht unterstützt. Ggf. ab V7R3ff?
-
Schick mir bitte die xml Datei per Mail, dann schaue ich mir das auf meinem System an
rainer_ross@web.de
-
Wenn Ihr auf den XML-INTO komplett verzichten würdet, und den Webservice in Verbindung mit XMLTABLE verwenden würdet, hättet Ihr Euch wahrscheinlich mehrere Tage Arbeit gespart.
SQL erwartet zum einen Per Default XML in UTF-8 und zum anderen kann SQL UTF-8 problemlos verarbeiten und in EBCDIC konvertieren.
Einfaches Beispiel:
Code:
Exec SQL
Select * into :YourDS
From XMLTable('/Start/Position'
Passing XMLParse(DOCUMENT HTTPGetCLOB('http://...', ''))
Columns MyCol1 VarChar(30) Path '/Pfad...',
MyCol2 VarChar(30) Path '/Pfad....',
...) a;
Birgitta
-
Mhm hatte nichts gefunden. Hatte aber auch nicht nach xml sax gesucht und vllt. hätte ich da dann auch google nutzen sollen.Ich. lese das sobald ich wieder am PC bin, am Handy gerade zu anstrengend.
XML_Table werde ich nachher auch testen, hatte vorhin auch einen Artikel auf deceloperWork gefunden zudem Thema, und danke für das Beispiel.
@Rainer Ross: Danke für das Angebot, ich teste dann aber erstmal xml_table, vllt. Löst das ja achon das Problem.
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
Moin,
ich bin zum testen gekommen. Ich habe das auf meinen Fall modifizierte SQL erstmal interaktive(mit DBeaver) abgesetzt. Das klappt soweit auch schon super:
Code:
ID DISPLAY_NAME ORT PLZ USERNAME
3 TestUser4 Hamburg 22143 testuser4
Zur Info warum plötzlich ein andere Username genutzt wurde(testuser4). Ich wollte erstmal die Funktion an sich testen, daher habe ich einen User genommen wo kein Umalut enthalten ist um sicher zu sein das falls es Probleme gibt dies nicht an einem Umlaut liegt.
Nun habe ich das mit embedded SQL probiert.
Code:
dcl-ds WebserviceRequest qualified;
id varchar(10);
display_name varchar(100);
ort varchar(100);
plz varchar(100);
username varchar(10);
end-ds;
exec sql set :query = systools.urlencode(:query,'UTF-8');
myurl += query;
EXEC SQL
SELECT * INTO :webservicerequest
FROM xmltable('/PagedListViewModelOfuserNcCATIYq/items/user'
passing xmlparse(document httpgetclob(:myurl, :myheader))
columns
id VARCHAR(10) PATH 'id',
display_name VARCHAR(100) PATH 'display_name',
ort VARCHAR(100) PATH 'ort',
plz VARCHAR(100) PATH 'plz',
username VARCHAR(10) PATH 'username') a;
doch leider wird die DS nicht gefüllt. Wenn ich das ganze debugge ist die DS nach dem aufruf jedenfalls leer. Habe ich etwas nicht beachtet?
Die DS hat die gleiche Reihenfolge der Felder wie sie beim SQL definiert sind und auch den gleichen Typ und Länge.
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
a) was sagt der SQLCODE?
b) gibt es JOBLOG-Einträge?
c) was steht im Spool als generierter SQL?
Das Problem des Precompilers ist, dass er beim SELECT * ja eine Namenszuordnung treffen muss.
Ggf. musst du die Felder statt * explizit benennen, was natürlich aufwändiger ist.
Des weiteren ist ggf. zu beachten, dass die Funktion XMLTABLE ja eine Tabelle bereitstellt, die auch mal mehr als 1 Zeile haben kann.
Also ist ggf. der Umweg über Declare Cursor, Open, Fetch, Close erforderlich.
Vielleicht reicht aber auch ein "fetch first 1 rows only" um einen "Select Into" verwenden zu können.
-
Hat sich bereits erledigt....habe übersehen das ich httpgetclob nicht qualifiert angegeben habe.
Nun passt alles und die DS wird richtig gefüllt! Nun teste ich das ganze mal mit einem User der Umalute enthält.
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
Also ich habe nach wie vor das Problem mit den Umlauten. Eben wieder auf den ursprünglichen 'testüser' geändert und wieder steht in der DS folgendes drin.
Code:
WEBSERVICEREQUEST.USERNAME = 'testüser '
EDIT: Wenn ich das ganze interaktiv mache ist das auch so. Umlaute werden nicht korrekt angezeigt.
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
Die Frage ist halt wieder, welche CCSID hat der CLOB, der vom httpgetclob zurückgeliefert wird.
Ich nehme mal schwer an, dass hier ggf. die JOB-CCSID genommen wird.
Somit sind die Daten nicht als UTF-8 erkennbar, denn offensichtlich interessiert sich der XMLTABLE nicht für die Encoding-Angabe des XML's.
Und somit sind wir wieder beim 3-Fach-Cast des Ergebnisses von httpgetclob.
Allerdings kann das auch wiederum an der Spaltendefinition liegen.
Siehe hier am Beispiel:
https://www.ibm.com/developerworks/c...0to%20SYSTOOLS
definiere in den Columns hinter varchar(nn) zusätzlich CCSID 1208.
Denn wie es aussieht macht der XMLTABLE keine Codewandlung sondern erst die SQL-Runtime bei der Fetch-Übergabe.
-
Nachtrag auch hier:
https://www.ibm.com/support/knowledg...zajpxmlvar.htm
Wenn du mit SQL XML umgehst müssen die Variablen mit CCSID 1208 definiert werden.
Ggf. wird dann mittels %CHAR in die SBCS bzw. mit %UCS2 in Unicode umgewandelt.
-
Wie sieht das Ergebnis aus, wenn Du das SQL-Statement direkt (nicht innerhalb eines Programms) absetzt?
Falsche oder richtige Werte?
ggf. musst Du noch das Ergebnis noch decoden mit URLDECODE.
Wenn auch bei einer direkten Abfrage falsche Werte kommen, dann ist das ursprüngliche XML verwutzt.
SQL geht per Default von UTF-8 aus, kann aber auch andere CCSIDs verarbeiten. Das hängt jedoch von der QAQQINI bzw. dem Eintrag in Option SQL_XML_DATA_CCSID ab.
Birgitta
Similar Threads
-
By svit in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 02-03-17, 16:13
-
By Malte in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 12-02-17, 11:07
-
By Malte in forum NEWSboard Programmierung
Antworten: 18
Letzter Beitrag: 11-11-16, 14:18
-
By svit in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 11-09-14, 14:23
-
By harbir in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 26-03-14, 14:13
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks