解析值时遇到意外的字符:筛选

时间:2014-10-07 04:12:04

标签: json encoding asp.net-web-api json.net

我从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());

解析值时遇到意外的字符:筛选 它适用于英语,但不适用于中文。 我确定这是编码问题。需要帮助

我引用了Unexpected character encountered while parsing value,但没有任何线索

1 个答案:

答案 0 :(得分:1)

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

使用Unicode编码时,响应确实是垃圾字符。如下所示将其更改为UTF8可解决问题。

tempString = Encoding.UTF8.GetString(buf, 0, count);

请注意,大多数情况下,XML / JSON的编码是UTF8,除非该服务实际上是在做一些Unicode(UTF16 Little Endian)