UTF8 в ASCII преобразование в C # - PullRequest
0 голосов
/ 17 июня 2019

Я знаю, что уже есть очень похожий вопрос здесь , но, к сожалению, топовый ответ мне не помог.

Я хочу POST некоторые данные в RESTful сетисервис через Unity Webrequest .Как указано в документации ,

Данные в postData будут экранированы, а затем интерпретированы в поток байтов через System.Text.Encoding.UTF8.

Данные в postData хранятся в формате JSON.Удаленный веб-сервис будет десериализовать все входящие данные, используя NewtonSoft.Json.

К сожалению, удаленный веб-сервис выдает JsonReaderException с сообщением "Unexpected character encountered while parsing value: %. Path '', line 0, position 0." Это потому, что опубликованные данные выглядят примерно такстрока (усеченная):

% 7b% 22LogType% 22% 3a% 22Drill% 22% 2c% 22Action% 22% 3a% 22Started% 22% 2c% 22Описание% 22% 3a% 22 ...

Я пытался перевести входящие данные из UTF-8 в ASCII перед вызовом библиотеки Newtonsoft.Json для десериализации:

byte[] contentBytes = await Request.Content.ReadAsByteArrayAsync();
string postContents = Encoding.ASCII.GetString(Encoding.Convert(Encoding.UTF8, Encoding.ASCII, contentBytes));

Однако JsonReaderException по-прежнемуброшен, потому что postContents все еще выглядит примерно так:

% 7b% 22LogType% 22% 3a% 22Drill% 22% 2c% 22Action% 22% 3a% 22Started% 22% 2c% 22Description%22% 3a% 22 ...

Что мне нужно сделать, чтобы удаленная веб-служба могла успешно десериализовать полученные данные?

1 Ответ

1 голос
/ 17 июня 2019

Данные, которые вы получаете, URL в кодировке .

Например:

  • %7b равно {
  • %22 равно "
  • %3a равно :

Итак, начало полученной строки закодированного URL-адреса таково:

{"LogType":"Drill"

, которая, несомненно, является допустимой строкой JSON.

Итак, вам нужно декодировать url в обычную строку JSON, а затем использовать JSON.NETдесериализовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...