![](/img/trans.png)
[英]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.