[英]InputStream for Objects from HttpURLConnection Not Getting All Data
[英]Getting improper Output from HttpURLConnection InputStream
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);
我得到的输出如下。
ÃœNÄ°TESÄ°TOPLANTI SALONU
但是实际输出应该是-GÜNİTESİTOPLANTI SALONU
谁能告诉我如何解决这个问题?
PS:该代码不是来自任何servlet。 它不是一个java类。
这将使用系统默认字符编码:
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
同样,这也将:
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
使用系统默认编码几乎总是一个坏主意,特别是对于网络。
您希望将哪种编码用于POST? 您应该设置Content-Type标头以指定要使用的编码,并且显然还要在对OutputStreamWriter
的构造函数调用中指定它。 同样,您应该使用响应的Content-Type来确定在InputStreamReader
调用中指定的编码。
一般来说,这样的事情使得值得使用更高级别的HTTP库,如Apache HttpClient 。 那应该能够为你处理编码。
您正尝试通过字符流阅读器(InputStream Reader)读取字节流(InputStream)。 这样做时你应该小心谨慎。 您需要为阅读器指定字符集,以正确解释传入的字节。 因此需要知道正在接收的数据的字符集和编码,并使用相同的字符集构建InputStreamReader,以便正确解释数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.