我从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,但没有任何线索
答案 0 :(得分:1)
我使用Web API控制器构建了一个快速示例测试,该控制器将返回一些中文字符串,并使用更改版本的客户端代码来读取响应。
使用Unicode编码时,响应确实是垃圾字符。如下所示将其更改为UTF8可解决问题。
tempString = Encoding.UTF8.GetString(buf, 0, count);
请注意,大多数情况下,XML / JSON的编码是UTF8,除非该服务实际上是在做一些Unicode(UTF16 Little Endian)