C# C语言中UTF8到ASCII的转换#
我知道已经有一个非常类似的问题,但不幸的是,上面的答案对我没有帮助 我想通过发布一些数据到RESTful web服务。如前所述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。”,这是因
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
:
{“日志类型”:“钻取”
这显然是一个有效的JSON字符串
因此,您需要做的是将其转换为常规JSON字符串,然后使用JSON.NET对其进行反序列化。我认为您的数据在传输过程中变成了URL编码。忘记ASCII,这只是另一个问题。
postData中的数据将被转义…
发布所有相关的C代码、客户端和服务器(如果可能)。Unity没有帮助通过将正文发布为x-www-form-urlencoded
类型,服务器显然不愿意对此进行解释。从我从文档收集的信息来看,您不能使用静态便利方法,您需要构造一个显式的UnityWebRequest
实例,并将uploadHandler
设置为RawUploadHandler
实例(假设您不能修改服务器代码来处理表单)@JeroenMostert当谈到web请求时,Unity仍在2001年。问题是OP发送此消息,另一方必须解码。@HenkHolterman该评论没有太多意义。OP的代码发送和接收,可以在任何一端处理。实际上不清楚谁拥有“远程web服务”“。但问题的焦点是客户。