Java 从HttpURLConnection InputStream获取不正确的输出

Java 从HttpURLConnection InputStream获取不正确的输出,java,inputstream,httpurlconnection,http-put,Java,Inputstream,Httpurlconnection,Http Put,我得到的结果如下 托普兰蒂萨洛努酒店 但实际产出应该是——GÜNİTESİTOPLANTI SALONU 谁能告诉我怎么解决这个问题吗 PS:代码不是来自任何servlet。它不是java类。这将使用系统默认字符编码: URL url = new URL("http://soandso.com"); String userpassword = username + ":" + password; conn = (HttpURLConnection)url.op

我得到的结果如下

托普兰蒂萨洛努酒店

但实际产出应该是——GÜNİTESİTOPLANTI SALONU

谁能告诉我怎么解决这个问题吗


PS:代码不是来自任何servlet。它不是java类。

这将使用系统默认字符编码:

      URL url = new URL("http://soandso.com");
      String userpassword = username + ":" + password;
      conn = (HttpURLConnection)url.openConnection();
      conn.setDoOutput(true);         
      conn.setRequestMethod("POST");         
      BASE64Encoder enc = new sun.misc.BASE64Encoder();          
      String encodedAuthorization = enc.encode( userpassword.getBytes() );
      conn.setRequestProperty("Authorization", "Basic "+encodedAuthorization);
      OutputStreamWriter writer =new OutputStreamWriter(conn.getOutputStream());
      writer.write("ABC");
      writer.flush ();
      writer.close();
      BufferedReader rd =new BufferedReader(new InputStreamReader(conn.getInputStream()));
      while ((inputLine = rd.readLine()) != null)
      System.out.println(inputLine);
同样,这也将:

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
使用系统默认编码几乎总是一个坏主意,尤其是对于网络

您想为帖子使用哪种编码?您应该设置Content-Type头以指定您使用的编码,并且显然还应该在对
OutputStreamWriter
的构造函数调用中指定它。同样,您应该使用响应的内容类型来确定要在
InputStreamReader
调用中指定的编码


一般来说,正是这样的情况才值得使用更高级别的HTTP库,例如。这应该能够为您处理编码。

您正试图通过字符流读取器(InputStream读取器)读取字节流(InputStream)。你在做这件事时要小心。您需要为读取器指定字符集,以便正确解释传入的字节。因此需要知道接收数据的字符集和编码,并使用相同的字符集构建InputStreamReader,以便正确解释数据。

谢谢,Jon。想知道哪种内容类型在这方面对我有帮助。@harish.raj:应该在
字符集
部分,例如
内容类型:text/plain;字符集=utf-8
。看,这听起来像一个HTML代码。很抱歉如何在InputStream中修复此问题?Vikas,你能识别我应该使用哪个字符集来修复此问题吗?我试过了,UTF-8和ISO-8859-1。但是没有运气!它可能是ISO-8859-3,但最有可能的编码将在请求头中提供,否则您将需要询问正在查询的服务器的所有者。您可以从服务器获得的HTTP响应中读取字符编码。然后,您可以适当地构建您的读者。
BufferedReader rd = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));