2014-06-15 53 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

相关问题