C#中的UTF8到ASCII转换

时间:2019-06-17 13:46:10

标签: c# .net unity3d encoding json.net

我知道已经有一个非常相似的问题here,但是不幸的是,最重要的答案对我没有帮助。

我想通过Unity Webrequest POST向RESTful Web服务添加一些数据。正如the documentation所说,

  

postData中的数据将被转义,然后解释为一个字节   通过System.Text.Encoding.UTF8流。

postData中的数据以JSON格式存储。远程Web服务将使用NewtonSoft.Json反序列化所有传入的数据。

不幸的是,远程Web服务抛出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%22Description%22%3a%22 ...

在调用Newtonsoft.Json库进行反序列化之前,我试图将UTF-8中的传入数据转换为ASCII:

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 ...

我该怎么做才能确保远程Web服务可以成功地反序列化接收到的数据?

1 个答案:

答案 0 :(得分:1)

您收到的数据是URL encoded

例如:

  • %7b{
  • %22"
  • %3a:

因此,接收到的URL编码字符串的开头是:

{"LogType":"Drill"

这显然是有效的JSON字符串。

因此,您需要做的是url decode将其转换为常规JSON字符串,然后使用JSON.NET将其反序列化。