2014-10-07 2 views
0

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

나는 일부 중국 문자열을 반환하고, 응답을 읽어 클라이언트 코드의 변경된 버전을 사용하여 웹 API 컨트롤러와 빠른 샘플 테스트를 내장하지 않습니다.

응답은 실제로 유니 코드 인코딩을 사용할 때 가비지 문자입니다. 아래 그림과 같이 UTF8로 변경하면 문제가 해결됩니다. 서비스가 정말 일부 유니 코드 (UTF16 리틀 엔디안)을 수행하지 않는 대부분의 시간, XML/JSON에 대한 인코딩은 UTF8입니다

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

관련 문제