PDA

View Full Version : Deepl REST API Übersetzung Zeichendarstellung



labm
21-12-23, 08:09
Hallo Forum,

Ich möchte gerne die Deepl REST-API benutzen um Texte zu übersetzten.

Aktuell benutze ich dafür die HTTPGETCLOB Funktion in DB2 SQL. Das Abschicken der Anfrage so wie das verarbeiteten der zurück kommenden Json-Daten funktioniert im englischen bspw. problemlos.
Mein Problem entsteht bei Sprachen die folgende Sonderzeichen benutzen: '^, `, ´, usw.'.
Dort bekomme ich am ende Keine lesbaren Symbole mehr zurück.
Die API selbst unterstützt die "richtige" Rückgabe der Texte, dies habe ich mit einer manuellen request über das Web getestet.

Ich habe bereits alle für mich Sinnig erscheinenden Datentypen sowohl im SQL als auch in RPG ausprobiert, habe aber dennoch immer das gleiche Ergebnis erhalten.

Vielleicht kennt jemand von euch dieses Problem und hat eine Lösung dafür parat oder einen alternativen Lösungsansatz zur Umsetzung und Lösung.

Viele Grüße

Fuerchau
21-12-23, 08:54
In der Regel werden dei Daten in UTF8 übertragen.
Daher musst du diese ggf. von CCSID 1208 nach 1200 (UCS) oder anderes casten.

B.Hauser
21-12-23, 09:32
Eigentlich werden die Daten in UTF-8 ausgetauscht und müssten somit richtig ankommen (es sei denn DEEPL würde ein anderes Format schicken, das dann als UTF-8 interpretiert wird).

Hast Du eigentlich schon mal die neuen APIs in QSYS2 (z.B. HTTP_GET) probiert?
Da kannst Du auch die Header besser setzen.
Vielleicht funktionierts damit.

Fuerchau
21-12-23, 10:10
https://www.ibm.com/docs/en/i/7.3?topic=overview-httpgetblob-httpgetclob-scalar-functions

Die Daten werden im CLOB als CSID 1208 geliefert und müssen dann z.B. in ein DBCLOB gecasted werden ,RPG-Type C CCSID(1200).
Wenn du die Daten native verarbeitest, erhältst du bei fast allen Nicht-ASCII-Zeichen eben Schrottdaten.

labm
21-12-23, 12:59
Hier einmal der Ausschnitt aus meinem Code / SQL:

SELECT CAST(text AS DBCLOB(1024) CCSID 1200) AS text FROM
JSON_TABLE(SYSTOOLS.HTTPGETCLOB('https://api-free.deepl.com/v2/trans
late?text=Meldepunkt%20Eingang&source_lang=DE&target_lang=SK&auth_ke
y=<<AuthKey>>',''), 'lax
$.translations
' COLUMNS(sprache VARCHAR(10) PATH 'lax
$.detected_source_language',text DBCLOB(1024) PATH 'lax $.text'))

Ich bekomme leider immer noch kein lesbares Ergebnis.

Fuerchau
21-12-23, 16:08
Welche CCSID hat dein Job? Wen 65535 setze mal 1141.

Andreas_Prouza
22-12-23, 07:29
Wechsle lieber auf POST statt GET.
Wundert mich dass man da überhaupt via GET was übertragen kann.
Bei GET gibt's einige Einschränkungen und ist gerade für sowas nicht geeignet.
Mit POST übergibst du die Daten via JSON im "HTTP Body".
Und ja, ich würde auch die SQL Functions aus der QSYS2 nehmen.