Anmelden

View Full Version : urlencode und UTF-8



dschroeder
04-10-17, 16:01
Hallo,
ich muss die Parameter für einen URL-Aufruf encoden. Die Parameter können (theoretisch) irgendwelche DBCS-Zeichen sein. Z.B. polnische Sonderzeichen. Sie liegen im Format varucs2 vor. Die Funktion systools.urlencode empfängt als Parameter aber nicht UTF-16, sondern nur Zeichen vom Typ UTF-8. Vor allem ist der Rückgabewert der Funktion vom Typ UTF-8. Wie kann ich mir das denn in eine RPG-Variable speichern?

In eine Variable von Type varucs2 geht es nicht.
Wie kann ich eine Variable deklarieren, die UTF-8 kann?

Dieter

Fuerchau
04-10-17, 17:34
Leider gar nicht.
Du definierst eine Variable vom Typ Char (also A) und konvertierst z.B. mittels SQL zwischen UCS2 und UTF8:
exec sql set : MyUcs2 = cast( cast(: MyUtF8 as varchar(nn) ccsid 1208) as nvarchar(nn));
exec sql set : myUtf8 = cast(: MyUcs2 as varchar(nn) ccsid 1208);

Bedenke nur, dass als "nn" theoretisch das doppelte von UCS2 (also bis 4 Bytes) auftreten kann.

dschroeder
05-10-17, 07:45
Vielen Dank, Baldur. Ich hatte bereits befürchtet, dass das nicht geht. Na, dann muss ich das alles direkt im SQL lösen.
Vielen Dank.

dschroeder
05-10-17, 12:00
Habe deinen Code jetzt implementiert, Baldur. Klappt sehr gut! Vielen Dank nochmal.
Hier der Code, falls es jemanden interessiert:

dcl-proc um_urlEncodeUni export;
dcl-pi *n varchar(32000);
url varucs2(16000) const;
end-pi;

dcl-s newUrl varchar(32000);

//Die Funktion urlencode erwartet UTF-8:
exec sql set :newUrl = SYSTOOLS.URLENCODE(cast(:url as varchar(30000) ccsid 1208), 'UTF-8');

return newUrl;