Вам просто нужно использовать TWebRequest.ContentRaw
, который возвращает AnsiString с правильной кодовой страницей на основе кодировки, определенной в заголовке запроса.К сожалению, вам придется обрабатывать содержимое вручную.
Чтобы получить строку (UnicodeString), используйте TEncoding.UTF8.GetString(BytesOf(Request.RawContent))
, если вы уверены, что charset имеет UTF-8.В качестве альтернативы вы можете проверить оригинальный contentType заголовка с:
var ct: string;
...
ct := string(Request.GetFieldByName('Content-type')).ToUpper;
if (Pos('CHARSET', ct) > 0) and (Pos('UTF-8', ct) > 0) then
Result := TEncoding.UTF8.GetString(BytesOf(Request.RawContent))
else
Result := TEncoding.ANSI.GetString(BytesOf(Request.RawContent));
TWebRequest.Content
и TWebRequest.ContentFields
содержат ошибки в моей текущей версии delphi ( xe7 ).Они всегда кодируются в ANSI.TWebRequest.EncodingFromContentType
попытаться извлечь кодировку из TWebRequest.ContentType
, но часть кодировки в contentType уже удалена предыдущим кодом.