Json 分析值时遇到意外字符:筛;
我从WebAPI返回中文字符,并使用以下代码解析响应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
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)