2014-06-15 57 views
0

我想讀一個java servlet發送到C#應用程序的字節,到目前爲止,我還沒有能夠從使用C#中的普通流的servlet獲取任何更多的亂碼。我嘗試了各種形式的解碼,但還沒有找到一種工作方式來從http源中將sbytes讀入c#應用程序。可以從流中讀取帶符號的字節嗎?

該servlet字節與

被修改代碼

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#讀取發送與

 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()); 
     } 

我結束了兩個問號或相同的兩個ASCII符號。

有沒有人有任何想法如何將這些Java字節流到C#應用程序?

+0

好像你的問題是沒有編碼符號字節更多相關。你有沒有試過'Encoding.UTF8'? –

+0

'「test」.getBytes()'會給出相同的結果。只是在說'。 – shmosel

+0

@ L.B謝謝,我試過UTF8,除了我得到黑色菱形問號而不是兩個ascii字符之外,沒有任何變化。 – user3344497

回答

2

兩個問題:

  • 您使用的是C#和Java的平臺默認的編碼。這幾乎總是一個不好的選擇。在Java中明確指定編碼 - UTF-8通常是一個不錯的選擇。 (這也是大多數.NET代碼的默認設置。)
  • 您忽略Stream.Read的返回值;一般來說,你應該使用它來計算你實際收到的數據量。在這種情況下,然而,這將是一個更好的辦法是使用StreamReader

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

字節的Java中的符號性在這裏無關緊要。

(另外,爲什麼您使用new String("test")?你覺得會做只是用"test"了嗎?)

+0

也沒有像* StreamReaer *這樣的類的幫助,使用返回值可能仍然會給出不正確的字符,因爲一個2字節字符可能會在* read * s之間被拆分爲s –

+0

@ L.B:True。你可以直接使用'Decoder',但是'StreamReader'會是更好的選擇。 –

+0

我仍然收到兩個鑽石問號作爲迴應...我以更完整的形式發佈了上面更新的代碼,以查看是否有任何重要的東西可能被遺漏並反映了您的建議更改。 (原始字符串更復雜一些,當我從Java客戶端切換到C#客戶端時,我將它簡化爲「測試」,並且我發現它不起作用。) – user3344497

相關問題