Получаю данные через Synapse в кодировке UTF8. Затем его надо прогнать через функцию StripNonJson и "засунуть" в переменную типа TJsonObject.
function StripNonJson(s: string): string; // Убирает лишние пробелы из json-строки
var
ch: char;
inString: boolean;
begin
Result := '';
inString := false;
for ch in s do
begin
if ch = '"' then
inString := not inString;
if TCharacter.IsWhiteSpace(ch) and not inString then
continue;
Result := Result + ch;
end;
end;
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;
var
json: TJSONObject;
// ...
begin
// ...
with THTTPSend.Create do
begin
try
MimeType := 'application/x-www-form-urlencoded';
Document.LoadFromStream(data);
if HTTPMethod('POST', 'http://httpbin.org/post') then
begin
WriteLn('res=' + MemoryStreamToString(Document));
json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StripNonJson(MemoryStreamToString(Document))), 0) as TJSONObject;
if Assigned(Json) then
begin
WriteLn('Json parsed!');
end
else
begin
WriteLn('Error parsing JSON!');
end;
end
else
begin
WriteLn('Request error: ' + IntToStr(ResultCode) + ' ' + ResultString);
end;
finally
Free;
end;
end;
end.
На экран выходят крякозябры и естественно в переменной json пусто.
Я так понимаю нужно перевести Document из utf8 в родной для Delphi 2010 unicode, но не знаю как это сделать.