PDA

View Full Version : Kroatischer Zeichensatz auf IBM i über Google Maps API Webservice



Seiten : [1] 2

Rainer Ross
10-08-14, 13:48
Hallo IBM i Forum,

ich benutze, um für eine Stadt die zugehörige Administrationseinheit zu finden, den Google Maps API Webservice, den ich mit meiner 720 V7R2 per Programm anspreche. Der Request sieht so aus - Baska eine Stadt in Kroatien:

https://maps.googleapis.com/maps/api/geocode/xml?address=baska&components=country:HR&language=de&sensor=false

Das Ergebnis schreibe ich in das IFS mit der CCSID 1208 UTF-8 und erhalte folgendes Ergebnis als XML-File:

<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
<status>OK</status>
<result>
<type>locality</type>
<type>political</type>
<formatted_address>Baška, Kroatien</formatted_address>
<address_component>
<long_name>Baška</long_name>
<short_name>Baška</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>Općina Baška</long_name>
<short_name>Općina Baška</short_name>
<type>administrative_area_level_2</type>
<type>political</type>
</address_component>

Jetzt möchte ich die Daten aus dem IFS mit xml-into parsen und in die Datenbank schreiben, das geht alles wunderbar. Aber es gibt Probleme mit dem Sonderzeichen "š".

Hat jemand einen Tipp für mich?

Meine Maschine ist auf CCSID 1141 - Deutscher Zeichensatz - in den Systemwerten eingestellt

Herzlichen Dank für die Antworten

Herzliche Grüße
Rainer Ross
www.myhofi.com (http://www.myhofi.com)
schnelle und komfortable Hotelsuchmaschine mit Volltextsuche – powered by IBM i

AG1965_2
11-08-14, 13:04
Nur mit dem "š"? Mit dem "ć" nicht?
Was für Probleme denn eigentlich?
Ich würde das in ein UCS-2-Feld legen.

Fuerchau
15-08-14, 12:24
Hier hilft nur tatsächlich UCS-2 (CCSID 13488 in der DB, Feldtyp C), ansonsten erhältst du halt Schrott in den Daten.

Rainer Ross
15-08-14, 12:45
Herzlichen Dank, ich probiere es aus. Muss ich im RPG-Header hier auch noch UCS-2 einfügen oder reicht es aus, die CCSID 13488 im Datenbankfeld zu definieren?

Fuerchau
15-08-14, 16:24
Ich weiß nicht, wie XML-INTO Zielfelder (DS) auswertet, sollte aber funktionieren, wenn deine DS-Felder mit "C" (UCS2) definiert sind.

Rainer Ross
15-08-14, 18:32
Hallo Fuerchau,

ich habe deinen Tipp wie folgt umgesetzt. Es geht um die Darstellung der Stadt Baška.

1. Eine Datei erstellt mit dem Feldtyp "G" und CCSID 13488

CITY 40G TEXT('CITY')
CCSID(13488)

2. Im Programm ein Feld mit 40C definiert, in das die Daten mit xml-into geparst werden

D long_name 40c

3. Das Ergebnis in der Datei sieht so aus. Die Unterstriche sind nicht darstellbare Zeichen. Ich habe sie nur eingefügt, da die Zeichen sonst verschoben sind.

*...+....1....+....2
_â_ /__ ,_ /
04060106060202020202
02010A0B010000000000

Hex 0042 = "B"
Hex 0061 = "a"
Hex 001A = ?
Hex 006B = "k"
Hex 0061 = "a"
Hex 0020 = Blank

lt. UTF-8 Zeichensatz müsste "š" Hex C5A1 sein, aber in der Datei steht Hex 001A. Hast du noch eine Idee?

Herzlichen Dank
Rainer

Fuerchau
16-08-14, 10:08
X'1A' ist ein Ersatzzeichen bei der Codewandlung von UTF-8 nach SBCS (z.B. 273).
Dies zeigt, dass XML-INTO intern ein normales Zeichenfeld verwendet und das Ergebnis dann nach UCS2 konvertiert. Daher halt auch der Zeichenverlust.

Beachte, ob die IFS-Datei wirklich CCSID 1208 hat, wenn nicht, wird die IFS-Datei erst noch von der Datei-CCSID in die gewünschte CCSID umkopiert, was wiederum zu Verlusten führen kann (Siehe Handbuch).

Um UCS2 zu erhalten muss in der Option des XML-INTO CCSID=UCS2 angegeben werden da sonst immer erst in die Job-CCSID gewandelt wird (siehe Handbuch)!

Rainer Ross
16-08-14, 12:28
Hallo Fuerchau,

wahrscheinlich sind wir nur noch einen Mausklick von der Lösung entfernt.

- Die CCSID der IFS-Datei habe ich geprüft, sie ist 1208

anbei der Inhalt als Hexcode: š ist korrekt als x'C5A1' in der Datei dargestellt

20203C61 64647265 73735F63 6F6D706F 6E656E74 <address_component
2020203C 6C6F6E67 5F6E616D 653E4261 C5A16B61 <long_name>Ba ka<
2020203C 73686F72 745F6E61 6D653E42 61C5A16B <short_name>Ba ka
2020203C 74797065 3E6C6F63 616C6974 793C2F74 <type>locality</t
2020203C 74797065 3E706F6C 69746963 616C3C2F <type>political</

- der XML-into enthält folgende Optionen:

d#opt = 'doc=file +
ccsid=ucs2 +
path=geocoderesponse +
countprefix=cnt_ +
case=any allowextra=yes +
allowmissing=yes'; // XML-Options

xml-into rsp %xml(%trim(d#stmf):%trim(d#opt));

Somit sollte alles korrekt sein, aber in der Datei erscheint trotzdem noch x'1A', irgendwo geht da etwas verloren.

Herzlichen Dank Fuerchau

Herzliche Grüße
Rainer Ross
www.myhofi.com (http://www.myhofi.com)
schnelle und komfortable Hotelsuchmaschine mit Volltextsuche – powered by IBM i

B.Hauser
16-08-14, 15:32
Nur so eine Frage:
Das Text-Feld in der Datenstruktur rsp ist mit Datentyp C oder Datentyp A definiert?

Rainer Ross
16-08-14, 16:14
Hallo Birgitta,

das Text-Feld ist wie folgt definiert:

dcl-ds address_component qualified;
type char(30) dim(2);
long_name ucs2(60);
short_name ucs2(60);
end-ds;