Json 分析值时遇到意外字符:筛;

Json 分析值时遇到意外字符:筛;,json,encoding,asp.net-web-api,json.net,Json,Encoding,Asp.net Web Api,Json.net,我从WebAPI返回中文字符,并使用以下代码解析响应 StringBuilder sb = new StringBuilder(); byte[] buf = new byte[8192]; string tempString = null; var request = (HttpWebRequest)HttpWebRequest.Create(endpoint); request.Accept = "applic

我从WebAPI返回中文字符,并使用以下代码解析响应

        StringBuilder sb = new StringBuilder();
        byte[] buf = new byte[8192];
        string tempString = null;

        var request = (HttpWebRequest)HttpWebRequest.Create(endpoint);
        request.Accept = "application/json";
        request.ContentType = "application/json";
        request.Method = method;
        var inputSerializer = new DataContractJsonSerializer(typeof(T));
        var outputSerializer = new DataContractJsonSerializer(typeof(T[]));
        var requestStream = request.GetRequestStream();
        inputSerializer.WriteObject(requestStream, pun);
        requestStream.Close();

        var response = request.GetResponse();
        Stream resstream = response.GetResponseStream();

        int count = 0;
        do
        {
            count = resstream.Read(buf, 0, buf.Length);
            if (count != 0)
            {
                tempString = Encoding.Unicode.GetString(buf, 0, count);
                sb.Append(tempString);
            }
        }
        while (count > 0);
        {
            //Response.Write(sb.ToString() + "<br/><br/>");
            // string[] val = sb.ToString().Split('"');
        }



        if (response.ContentLength == 0)
        {
            response.Close();
            return default(T[]);
        }

        T[] responseObject = JsonConvert.DeserializeObject<T[]>(sb.ToString());
StringBuilder sb=新建StringBuilder();
字节[]buf=新字节[8192];
字符串tempString=null;
var request=(HttpWebRequest)HttpWebRequest.Create(endpoint);
request.Accept=“application/json”;
request.ContentType=“application/json”;
request.Method=Method;
var-inputSerializer=newdatacontractjsonserializer(typeof(T));
var outputSerializer=newdatacontractjsonserializer(typeof(T[]);
var requestStream=request.GetRequestStream();
inputSerializer.WriteObject(requestStream,pun);
requestStream.Close();
var response=request.GetResponse();
Stream resstream=response.GetResponseStream();
整数计数=0;
做
{
count=resstream.Read(基本单位,0,基本单位长度);
如果(计数!=0)
{
tempString=Encoding.Unicode.GetString(buf,0,count);
某人附加(临时字符串);
}
}
而(计数>0);
{
//写(sb.ToString()+“

”); //字符串[]val=sb.ToString().Split(“”); } if(response.ContentLength==0) { response.Close(); 返回默认值(T[]); } T[]responseObject=JsonConvert.DeserializeObject(sb.ToString());
分析值时遇到意外字符:筛 它适用于英语,但不适用于汉语。 我确信这是编码问题。需要帮助吗


我参考了,但没有任何线索

我用一个Web API控制器构建了一个快速的示例测试,该控制器将返回一些中文字符串,并使用您的客户端代码的更改版本来读取响应

        StringBuilder sb = new StringBuilder();
        byte[] buf = new byte[8192];
        string tempString = null;

        var request = (HttpWebRequest)HttpWebRequest.Create(endpoint);
        request.Accept = "application/json";
        request.ContentType = "application/json";
        request.Method = method;
        var inputSerializer = new DataContractJsonSerializer(typeof(T));
        var outputSerializer = new DataContractJsonSerializer(typeof(T[]));
        var requestStream = request.GetRequestStream();
        inputSerializer.WriteObject(requestStream, pun);
        requestStream.Close();

        var response = request.GetResponse();
        Stream resstream = response.GetResponseStream();

        int count = 0;
        do
        {
            count = resstream.Read(buf, 0, buf.Length);
            if (count != 0)
            {
                tempString = Encoding.Unicode.GetString(buf, 0, count);
                sb.Append(tempString);
            }
        }
        while (count > 0);
        {
            //Response.Write(sb.ToString() + "<br/><br/>");
            // string[] val = sb.ToString().Split('"');
        }



        if (response.ContentLength == 0)
        {
            response.Close();
            return default(T[]);
        }

        T[] responseObject = JsonConvert.DeserializeObject<T[]>(sb.ToString());
当使用Unicode编码时,响应实际上是垃圾字符。将其更改为UTF8(如下所示)修复了该问题

tempString = Encoding.UTF8.GetString(buf, 0, count);
请注意,大多数情况下,XML/JSON的编码是UTF8,除非服务真的在执行一些Unicode(UTF16 Little-Endian)