【问题标题】:Reading Java servlet bytes from stream on C# client从 C# 客户端上的流中读取 Java servlet 字节
【发布时间】:2023-03-30 17:49:01
【问题描述】:

我在读取 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# 字节(有符号与无符号)之间存在差异,但我不知道如何将 Java 的有符号字节流式传输到 c# 可以识别的内容中。有任何想法吗?就发送信息的方式而言,我是否需要在 servlet 上进行一些调整,或者是否需要修改 C# 位?

【问题讨论】:

  • 您是否有特殊原因要使用底层字节,而不是使用 UTF-8(或 UTF-16)编码的文本?我建议你看看ServletResponse.getWriter()ServletResponse.flushBuffer() 也可能是个好主意)。
  • @ElliottFrisch 尝试了 getWriter() 选项,并收到了相同的字符,我也尝试使用 TextReader,在编写器在 servlet 中使用后,结果相同。我应该在 C# 代码中做些什么不同的事情来让我更好地阅读 java printwriter 的响应?

标签: java c# stream


【解决方案1】:

最快的做法是在你的 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")

【讨论】:

  • 不幸的是,我只得到两个黑色菱形问号符号(使用 UTF-8 时)或两个 ASCII 符号(使用 1252 时)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多