Setting Extended ASCII Codes in Delphi
Brought to you by:
leon_kon
I'm setting the value of an JSON-String in Delphi (the String contains the extended ASCII Code ü (129)). At this time the value is correct inside the JSON-Object. When I use the GenerateText-function the Result does not contain the right value.
parameter := TlkJSONobject.Create(false);
ids := TlkJSONlist.Create();
ids.Add('Flurstück');
parameter.Add('IDS', ids);
TlkJSON.GenerateText(parameter):
'{"IDS":["Flurstück"]}' would be expected.
'{"IDS":["Flurstück"]}' is returned.
The value is switched to the wrong value in the following line in GenerateText:
ws := UTF8Encode(TlkJSONstring(obj).FValue);
in line 1535 alter this
if obj is TlkJSONstring then
begin
// ws := UTF8Encode(TlkJSONstring(obj).FValue);
ws := TlkJSONstring(obj).FValue;
i := 1;
mem_ch('"');
while i <= length(ws) do
begin
case ws[i] of
'/', '\', '"':
begin
mem_ch('\');
mem_ch(ws[i]);
end;
#8: mem_write('\b');
#9: mem_write('\t');
#10: mem_write('\n');
#13: mem_write('\r');
#12: mem_write('\f');
else
// if (ord(ws[i]) < 32) then
if (ord(ws[i]) < 32) or (ord(ws[i]) > 122) then
mem_write('\u' + inttohex(ord(ws[i]), 4))
else
mem_ch(ws[i]);
end;
inc(i);
end;
mem_ch('"');
end
works for me