2014-06-15 4 views
0

자바 서블릿에서 C# 응용 프로그램으로 보낸 바이트를 읽으려고하는데, 지금까지는 C#에서 일반 스트림을 사용하는 서블릿에서 이상한 것을 얻을 수 없었습니다. 다양한 형태의 디코딩을 시도했지만 http 소스에서 sbytes를 C# 응용 프로그램으로 읽는 작업 방법을 찾지 못했습니다.스트림에서 부호있는 바이트를 읽을 수 있습니까?

서블릿 바이트는 내가 두 개의 물음표 또는 동일한 두 개의 아스키 문자로 끝날

 try 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://path.to/servlet"); 
      req.Method = "POST"; 
      req.ContentType = "text/html"; 
      HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

      string text; 
      using (var reader = new StreamReader(resp.GetResponseStream())) 
      { 
       text = reader.ReadToEnd(); 
       Console.WriteLine(text); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
     } 

편집 코드

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
    ServletOutputStream resp = response.getOutputStream(); 
    try{ 
     resp.write("test".getBytes("UTF-8")); 
    } 
    catch(Exception e){ 
     //Do Nothing 
    } 

C 번호가에서 읽기로 전송됩니다.

누구나 C# 응용 프로그램으로 이러한 Java 바이트를 스트리밍하는 방법을 알고 있습니까?

+0

보인다. 'Encoding.UTF8'을 사용해 보셨습니까? –

+0

''test ".getBytes()'는 같은 결과를 줄 것입니다. 그냥 선생님. – shmosel

+0

@ L.B 감사합니다. UTF8을 사용해 보았습니다. 두 개의 ASCII 문자가 아닌 검은 색 물음표가 표시되어 있습니다. – user3344497

답변

2

두 가지 문제 :

  • 당신은 모두 C# 및 자바 플랫폼의 기본 인코딩을 사용하고 있습니다. 거의 항상 나쁜 선택입니다. Java에서 명시 적으로 인코딩을 지정하십시오. 일반적으로 UTF-8이 좋습니다. (이는 대부분의 .NET 코드에 대한 기본값이기도합니다.)
  • Stream.Read의 반환 값을 무시합니다. 일반적으로 얼마나 많은 데이터를 실제로 처리했는지를 알아야합니다. 그러나이 경우, 그것은 훨씬 더 나은 아이디어가 StreamReader을 사용하는 것입니다 : 자바 바이트의 부호의 여기에 관련이

    string text; 
    // Uses UTF-8 implicitly 
    using (var reader = new StreamReader(httpResponse.GetResponseStream()) 
    { 
        text = reader.ReadToEnd(); 
    } 
    

.

(또한, 왜? 당신이 방금 "test"을 사용하여 이상 할 것 어떻게 생각하십니까? new String("test") 사용하는) 질문 인코딩하지 서명 바이트와 더 관련이 같은

+0

* StreamReaer *와 같은 클래스의 도움 없이도 반환 값을 사용하면 2 바이트 문자가 * read * s –

+0

@ L.B : True 사이에서 분할 될 수 있으므로 잘못된 문자가 제공 될 수 있습니다. 'Decoder'를 직접 사용할 수는 있지만,'StreamReader'는 훨씬 더 좋은 선택이 될 것입니다. –

+0

나는 여전히 두 개의 다이아몬드 물음표를 응답으로 얻고있다 ... 나는 위의 코드를 게시하여 더 완전한 형태로 작성하여 중요하지 않은 부분이 있는지 확인하고 제안 된 변경 사항을 반영하는지 확인했다. (원래의 문자열은 좀 더 복잡했기 때문에 Java 클라이언트에서 C# 클라이언트로 전환했을 때 "테스트"로 단순화했습니다. 작동하지 않는 것으로 나타났습니다.) – user3344497

관련 문제