@WolfGangNock

Что с кодировкой полученного контента?

1. Отправляю XML-документ через POST запрос (протокол http) на один сервис - получаю ответ. Делаю парсинг и извлекаю данные с этого ответа.
var request = new HttpRequestMessage();
            // настройка параметров сообщения (headers, uri и т.л. не важно)
            var requestXmlBody = CreateAuthorizationXmlDocument(email, password);
            request.Content = new StringContent(requestXmlBody.OuterXml, Encoding.UTF8, "application/soap+xml");

            var client = new HttpClient();
            var response = await client.SendAsync(request);
            var responseStr = await response.Content.ReadAsStringAsync();

            var responseXml = new XmlDataDocument();
            responseXml.LoadXml(responseStr);

            MessageBox.Show(responseXml.OuterXml);

            var tokens = responseXml.GetElementsByTagName("token");


Это работает идеально, всё отлично. Пытаюсь по этому принципу отправить следующий запрос, который уже использует JSON.

var request = new HttpRequestMessage();
             // ...
            var requestJsonBody = CreateSomeFieldObtainingJsonDocument();
            request.Content = new StringContent(requestJsonBody.ToString(), Encoding.UTF8, "application/json");

            var client = new HttpClient();
            var response = await client.SendAsync(request);
            var responseStr = await response.Content.ReadAsStringAsync();

            MessageBox.Show(responseStr);

            var responseJson = (JObject)JsonConvert.DeserializeObject(responseStr);
            addressFields = responseJson["someField"];

            thisClassField= (string) responseJson.Property("someField").Value;


Проблема:
во втором случае получаю данные в непонятной кодировке, которое JObject не может пропарсить. Как отладчик Visual Studio, так и вывод данных через MessageBox показывают просто набор иероглифов. Хотя просматриваю отправленные и полученные пакеты через Fiddler - всё отлично. Получаю данные в формате UTF-8, которые Fiddler нормально считывает и которые имеют то самое поле, которое мне нужно. Как мне решить эту проблему?
  • Вопрос задан
  • 1387 просмотров
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Если вы уверены, что там UTF-8, то меняем это:
var responseStr = await response.Content.ReadAsStringAsync();

на это:
var responseStr = Encoding.UTF8.GetString(await response.Content.ReadAsByteArrayAsync());


А по-хорошему, следует посмотреть, какая кодировка указана в заголовке Content-Type, ее и использовать (Fiddler как раз это и делает).

В любом случае, доверять задачу определения кодировок стандартным библиотекам считаю верхом наивности.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы