首页 > 解决方案 > C# 中的 UTF8 到 ASCII 转换

问题描述

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

我想通过Unity WebrequestPOST将一些数据发送到 RESTful Web 服务。正如文件所说,

中的数据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 服务可以成功反序列化它接收到的数据?

标签: c#.netunity3dencodingjson.net

解决方案


您收到的数据是URL 编码的。

例如:

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

所以接收到的 URL 编码字符串的开头是这样的:

{"LogType":"Drill"

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

因此,您需要做的是将其url 解码为常规 JSON 字符串,然后使用 JSON.NET 对其进行反序列化。


推荐阅读