在C#客户端上从流中读取Java servlet字节

时间:2014-06-15 02:40:13

标签: java c# stream

我遇到了Java servlet发送到用C#编写的客户端的字节读取问题。

C#代码

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

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream respStream = res.GetResponseStream();
            byte[] re = new byte[512];
            respStream.Read(re, 0, re.Length);
            MessageBox.Show(Encoding.Default.GetString(re));

Java代码

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    ServletOutputStream resp = response.getOutputStream();
    try{
        resp.write(new String("Test String").getBytes());
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

我意识到Java字节和C#字节(signed vs unsigned)之间存在差异,但我不知道如何将java的签名字节流式传输到c#可识别的字节中。有任何想法吗?我是否需要在servlet上调整一些信息,或者需要修改C#位?

1 个答案:

答案 0 :(得分:0)

最快的事情是在C#代码中指定编码,而不是

Encoding.Default.GetString(re)

你应该可以使用,

System.Text.Encoding.GetEncoding(1252).GetString(re)

根据Windows-1252上的维基百科条目,它是ISO-8859-1(Java默认字符编码)的超集。您可以考虑在两端明确使用UTF-8,

System.Text.Encoding.UTF8.GetString(re)

和Java,

new String("Test String").getBytes("UTF-8")