Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中UTF8到ASCII的转换#_C#_.net_Unity3d_Encoding_Json.net - Fatal编程技术网

C# C语言中UTF8到ASCII的转换#

C# C语言中UTF8到ASCII的转换#,c#,.net,unity3d,encoding,json.net,C#,.net,Unity3d,Encoding,Json.net,我知道已经有一个非常类似的问题,但不幸的是,上面的答案对我没有帮助 我想通过发布一些数据到RESTful web服务。如前所述 postData中的数据将被转义,然后解释为字节 通过System.Text.Encoding.UTF8传输 postData中的数据以JSON格式存储。远程web服务将使用NewtonSoft.Json反序列化所有传入数据 不幸的是,远程web服务抛出一个JsonReaderException,消息为“分析值时遇到意外字符:%.Path“”,第0行,位置0。”,这是因

我知道已经有一个非常类似的问题,但不幸的是,上面的答案对我没有帮助

我想通过发布一些数据到RESTful web服务。如前所述

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

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

不幸的是,远程web服务抛出一个
JsonReaderException
,消息为
“分析值时遇到意外字符:%.Path“”,第0行,位置0。”
,这是因为发布的数据看起来像一个字符串(被截断):

%7b%22日志类型%22%3a%22钻孔%22%2c%22操作%22%3a%22已开始%22%2c%22说明%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%22日志类型%22%3a%22钻孔%22%2c%22操作%22%3a%22已开始%22%2c%22说明%22%3a%22


如何确保远程web服务能够成功地反序列化其接收的数据?

您正在接收的数据是

例如:

  • %7b
    {
  • %22
  • %3a
因此,接收到的URL编码字符串的开头是:

{“日志类型”:“钻取”

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


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

我认为您的数据在传输过程中变成了URL编码。忘记ASCII,这只是另一个问题。
postData中的数据将被转义…
发布所有相关的C代码、客户端和服务器(如果可能)。Unity没有帮助通过将正文发布为
x-www-form-urlencoded
类型,服务器显然不愿意对此进行解释。从我从文档收集的信息来看,您不能使用静态便利方法,您需要构造一个显式的
UnityWebRequest
实例,并将
uploadHandler
设置为
RawUploadHandler
实例(假设您不能修改服务器代码来处理表单)@JeroenMostert当谈到web请求时,Unity仍在2001年。问题是OP发送此消息,另一方必须解码。@HenkHolterman该评论没有太多意义。OP的代码发送和接收,可以在任何一端处理。实际上不清楚谁拥有“远程web服务”“。但问题的焦点是客户。